Built with Alectryon, running Coq+SerAPI v8.15.0+0.15.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
From Coq Require Import ssreflect ssrfun ssrbool.
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Require Import Setoid.
From Coq Require Import Ensembles.
From Coq.Logic Require Import FunctionalExtensionality.
From Coq.Logic Require Import PropExtensionality ClassicalFacts.

New coercion path [Bool.Is_true] : bool >-> Sortclass is ambiguous with existing [is_true] : bool >-> Sortclass. [ambiguous-paths,typechecker]
New coercion path [Is_true] : bool >-> Sortclass is ambiguous with existing [is_true] : bool >-> Sortclass. [ambiguous-paths,typechecker]
From MatchingLogic Require Import Syntax Semantics DerivedOperators_Syntax DerivedOperators_Semantics monotonic Utils.Lattice Utils.stdpp_ext IndexManipulation . Import MatchingLogic.Syntax.Notations. Import MatchingLogic.DerivedOperators_Syntax.Notations. Section with_signature. Context {Σ : Signature}.
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern

well_formed_positive (mu , ϕ) → let X := fresh_svar ϕ in let F := Fassoc ρ (svar_open 0 X ϕ) X in let Sfix := eval ρ (mu , ϕ) in F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern

well_formed_positive (mu , ϕ) → let X := fresh_svar ϕ in let F := Fassoc ρ (svar_open 0 X ϕ) X in let Sfix := eval ρ (mu , ϕ) in F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) (eval ρ (mu , ϕ)) = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → Fassoc ρ (svar_open 0 X ϕ) X (eval ρ (mu , ϕ)) = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → F (eval ρ (mu , ϕ)) = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

MonotonicFunction F
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

MonotonicFunction F
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

MonotonicFunction (Fassoc ρ (svar_open 0 X ϕ) X)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

MonotonicFunction (λ S : propset M, eval (update_svar_val X S ρ) (svar_open 0 X ϕ))
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

well_formed_positive (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
svar_is_fresh_in X ϕ
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

svar_is_fresh_in X ϕ
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

svar_is_fresh_in (fresh_svar ϕ) ϕ
apply set_svar_fresh_is_fresh.
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F

F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F

isFixpoint F (LeastFixpointOf F)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Ffix: isFixpoint F (LeastFixpointOf F)
F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F

isFixpoint F (LeastFixpointOf F)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F

MonotonicFunction F
apply HFmono.
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Ffix: isFixpoint F (LeastFixpointOf F)

F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Ffix: F (LeastFixpointOf F) = LeastFixpointOf F

F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Ffix: F (LeastFixpointOf F) = LeastFixpointOf F
HeqSfix: Sfix = (let X := fresh_svar ϕ in LeastFixpointOf (λ S : propset M, let ρ' := update_svar_val X S ρ in eval ρ' (svar_open 0 X ϕ)))

F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Ffix: F (LeastFixpointOf F) = LeastFixpointOf F
HeqSfix: Sfix = LeastFixpointOf (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))

F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = (λ S : propset M, eval (update_svar_val X S ρ) (svar_open 0 X ϕ))
Sfix: propset M
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Ffix: F (LeastFixpointOf F) = LeastFixpointOf F
HeqSfix: Sfix = LeastFixpointOf (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))

F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
Sfix: propset M
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Ffix: F (LeastFixpointOf F) = LeastFixpointOf F
HeqSfix: Sfix = LeastFixpointOf (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))
HeqF: F = (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))

F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
Sfix: propset M
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Ffix: F (LeastFixpointOf F) = LeastFixpointOf F
HeqF: F = (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))
HeqSfix: Sfix = LeastFixpointOf F

F Sfix = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
Sfix: propset M
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
HeqF: F = (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))
HeqSfix: Sfix = LeastFixpointOf F
Ffix: F Sfix = Sfix

F Sfix = Sfix
apply Ffix. Qed.
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M

well_formed_positive (mu , ϕ) → let X := fresh_svar ϕ in let F := Fassoc ρ (svar_open 0 X ϕ) X in let Sfix := eval ρ (mu , ϕ) in F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M

well_formed_positive (mu , ϕ) → let X := fresh_svar ϕ in let F := Fassoc ρ (svar_open 0 X ϕ) X in let Sfix := eval ρ (mu , ϕ) in F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) S ⊆ S → eval ρ (mu , ϕ) ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → Fassoc ρ (svar_open 0 X ϕ) X S ⊆ S → eval ρ (mu , ϕ) ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → F S ⊆ S → eval ρ (mu , ϕ) ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)

no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ → F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

MonotonicFunction F
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

MonotonicFunction F
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

MonotonicFunction (Fassoc ρ (svar_open 0 X ϕ) X)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

MonotonicFunction (λ S : propset M, eval (update_svar_val X S ρ) (svar_open 0 X ϕ))
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

well_formed_positive (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
svar_is_fresh_in X ϕ
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

svar_is_fresh_in X ϕ
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ

svar_is_fresh_in (fresh_svar ϕ) ϕ
apply set_svar_fresh_is_fresh.
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F

F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F

LeastFixpointOf F = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Hlfp: LeastFixpointOf F = Sfix
F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F

LeastFixpointOf F = Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction (Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ))

LeastFixpointOf (Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ)) = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction (Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ))

LeastFixpointOf (Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ)) = (let X := fresh_svar ϕ in LeastFixpointOf (λ S : propset M, let ρ' := update_svar_val X S ρ in eval ρ' (svar_open 0 X ϕ)))
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction (Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ))

LeastFixpointOf (Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ)) = LeastFixpointOf (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction (Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ))

LeastFixpointOf (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ)) = LeastFixpointOf (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))
reflexivity.
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Hlfp: LeastFixpointOf F = Sfix

F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Hlfp: LeastFixpointOf F = Sfix
Hincl: F S ⊆ S

Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Hlfp: LeastFixpointOf F = Sfix
Hincl: F S ⊆ S
Hleast: leq (F S) S → leq (LeastFixpointOf F) S

Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Hlfp: LeastFixpointOf F = Sfix
Hincl: F S ⊆ S
Hleast: F S ⊆ S → LeastFixpointOf F ⊆ S

Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Hlfp: LeastFixpointOf F = Sfix
Hincl: F S ⊆ S
Hleast: LeastFixpointOf F ⊆ S

Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
S: propset M
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix: propset M
HeqSfix: Sfix = eval ρ (mu , ϕ)
OS:= PropsetOrderedSet M: OrderedSet (propset M)
L:= PowersetLattice M: CompleteLattice (propset M)
Hwfp: no_negative_occurrence_db_b 0 ϕ && well_formed_positive ϕ
HFmono: MonotonicFunction F
Hlfp: LeastFixpointOf F = Sfix
Hincl: F S ⊆ S
Hleast: Sfix ⊆ S

Sfix ⊆ S
apply Hleast. Qed.
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M

well_formed_positive (mu , ϕ) → let X := fresh_svar ϕ in let F := Fassoc ρ (svar_open 0 X ϕ) X in F Sfix ⊆ Sfix → ( S : propset M, F S ⊆ S → Sfix ⊆ S) → Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M

well_formed_positive (mu , ϕ) → let X := fresh_svar ϕ in let F := Fassoc ρ (svar_open 0 X ϕ) X in F Sfix ⊆ Sfix → ( S : propset M, F S ⊆ S → Sfix ⊆ S) → Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)

let X := fresh_svar ϕ in let F := Fassoc ρ (svar_open 0 X ϕ) X in F Sfix ⊆ Sfix → ( S : propset M, F S ⊆ S → Sfix ⊆ S) → Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)

Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) Sfix ⊆ Sfix → ( S : propset M, Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) S ⊆ S → Sfix ⊆ S) → Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ

Fassoc ρ (svar_open 0 X ϕ) X Sfix ⊆ Sfix → ( S : propset M, Fassoc ρ (svar_open 0 X ϕ) X S ⊆ S → Sfix ⊆ S) → Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X

F Sfix ⊆ Sfix → ( S : propset M, F S ⊆ S → Sfix ⊆ S) → Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Hprefix: F Sfix ⊆ Sfix
Hleast: S : propset M, F S ⊆ S → Sfix ⊆ S

Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Hprefix: F Sfix ⊆ Sfix
Hleast: S : propset M, F S ⊆ S → Sfix ⊆ S

Sfix = (let X := fresh_svar ϕ in LeastFixpointOf (λ S : propset M, let ρ' := update_svar_val X S ρ in eval ρ' (svar_open 0 X ϕ)))
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Hprefix: F Sfix ⊆ Sfix
Hleast: S : propset M, F S ⊆ S → Sfix ⊆ S

Sfix = LeastFixpointOf (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = (λ S : propset M, eval (update_svar_val X S ρ) (svar_open 0 X ϕ))
Hprefix: F Sfix ⊆ Sfix
Hleast: S : propset M, F S ⊆ S → Sfix ⊆ S

Sfix = LeastFixpointOf (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
Hprefix: F Sfix ⊆ Sfix
Hleast: S : propset M, F S ⊆ S → Sfix ⊆ S
HeqF: F = (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))

Sfix = LeastFixpointOf (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
Hprefix: F Sfix ⊆ Sfix
Hleast: S : propset M, F S ⊆ S → Sfix ⊆ S
HeqF: F = (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))

Sfix = LeastFixpointOf F
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
Hprefix: F Sfix ⊆ Sfix
Hleast: S : propset M, F S ⊆ S → Sfix ⊆ S
HeqF: F = (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))

leq (F Sfix) Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
Hprefix: F Sfix ⊆ Sfix
Hleast: S : propset M, F S ⊆ S → Sfix ⊆ S
HeqF: F = (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))
x : propset M, leq (F x) x → leq Sfix x
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
Hprefix: F Sfix ⊆ Sfix
Hleast: S : propset M, F S ⊆ S → Sfix ⊆ S
HeqF: F = (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))

leq (F Sfix) Sfix
apply Hprefix.
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
Hprefix: F Sfix ⊆ Sfix
Hleast: S : propset M, F S ⊆ S → Sfix ⊆ S
HeqF: F = (λ S : propset M, eval (update_svar_val (fresh_svar ϕ) S ρ) (svar_open 0 (fresh_svar ϕ) ϕ))

x : propset M, leq (F x) x → leq Sfix x
apply Hleast. Qed.
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M

well_formed_positive (mu , ϕ) → let X := fresh_svar ϕ in let F := Fassoc ρ (svar_open 0 X ϕ) X in F Sfix ⊆ Sfix ∧ ( S : propset M, F S ⊆ S → Sfix ⊆ S) ↔ Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M

well_formed_positive (mu , ϕ) → let X := fresh_svar ϕ in let F := Fassoc ρ (svar_open 0 X ϕ) X in F Sfix ⊆ Sfix ∧ ( S : propset M, F S ⊆ S → Sfix ⊆ S) ↔ Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)

let X := fresh_svar ϕ in let F := Fassoc ρ (svar_open 0 X ϕ) X in F Sfix ⊆ Sfix ∧ ( S : propset M, F S ⊆ S → Sfix ⊆ S) ↔ Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)

Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) Sfix ⊆ Sfix ∧ ( S : propset M, Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) S ⊆ S → Sfix ⊆ S) ↔ Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ

Fassoc ρ (svar_open 0 X ϕ) X Sfix ⊆ Sfix ∧ ( S : propset M, Fassoc ρ (svar_open 0 X ϕ) X S ⊆ S → Sfix ⊆ S) ↔ Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X

F Sfix ⊆ Sfix ∧ ( S : propset M, F S ⊆ S → Sfix ⊆ S) ↔ Sfix = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)

F Sfix ⊆ Sfix ∧ ( S : propset M, F S ⊆ S → Sfix ⊆ S) ↔ Sfix = Sfix'
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)

F Sfix ⊆ Sfix ∧ ( S : propset M, F S ⊆ S → Sfix ⊆ S) → Sfix = Sfix'
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)
Sfix = Sfix' → F Sfix ⊆ Sfix ∧ ( S : propset M, F S ⊆ S → Sfix ⊆ S)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)

F Sfix ⊆ Sfix ∧ ( S : propset M, F S ⊆ S → Sfix ⊆ S) → Sfix = Sfix'
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)
H1: F Sfix ⊆ Sfix
H2: S : propset M, F S ⊆ S → Sfix ⊆ S

Sfix = Sfix'
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
H2: S : propset M, Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) S ⊆ S → Sfix ⊆ S
H1: Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) Sfix ⊆ Sfix

Sfix = eval ρ (mu , ϕ)
auto using eval_mu_if_lfp.
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)

Sfix = Sfix' → F Sfix ⊆ Sfix ∧ ( S : propset M, F S ⊆ S → Sfix ⊆ S)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)
H: Sfix = Sfix'

F Sfix ⊆ Sfix ∧ ( S : propset M, F S ⊆ S → Sfix ⊆ S)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)
H: Sfix = Sfix'

F Sfix ⊆ Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)
H: Sfix = Sfix'
S : propset M, F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)
H: Sfix = Sfix'

F Sfix ⊆ Sfix
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Hwfp: well_formed_positive (mu , ϕ)

Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) (eval ρ (mu , ϕ)) ⊆ eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Hwfp: well_formed_positive (mu , ϕ)

Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) (eval ρ (mu , ϕ)) = eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Hwfp: well_formed_positive (mu , ϕ)
H: Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) (eval ρ (mu , ϕ)) = eval ρ (mu , ϕ)
Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) (eval ρ (mu , ϕ)) ⊆ eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Hwfp: well_formed_positive (mu , ϕ)

well_formed_positive (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Hwfp: well_formed_positive (mu , ϕ)
H: Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) (eval ρ (mu , ϕ)) = eval ρ (mu , ϕ)
Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) (eval ρ (mu , ϕ)) ⊆ eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Hwfp: well_formed_positive (mu , ϕ)
H: Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) (eval ρ (mu , ϕ)) = eval ρ (mu , ϕ)

Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) (eval ρ (mu , ϕ)) ⊆ eval ρ (mu , ϕ)
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Hwfp: well_formed_positive (mu , ϕ)
H: Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) (eval ρ (mu , ϕ)) = eval ρ (mu , ϕ)

eval ρ (mu , ϕ) ⊆ eval ρ (mu , ϕ)
apply reflexivity.
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)
H: Sfix = Sfix'

S : propset M, F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Sfix: propset M
Hwfp: well_formed_positive (mu , ϕ)
X: svar
HeqX: X = fresh_svar ϕ
F: propset M → propset M
HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
Sfix': propset M
HeqSfix': Sfix' = eval ρ (mu , ϕ)
H: Sfix = Sfix'
S: propset M

F S ⊆ S → Sfix ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Hwfp: well_formed_positive (mu , ϕ)
S: propset M

Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ) (fresh_svar ϕ) S ⊆ S → eval ρ (mu , ϕ) ⊆ S
Σ: Signature
M: Model
ρ: Valuation
ϕ: Pattern
Hwfp: well_formed_positive (mu , ϕ)
S: propset M

well_formed_positive (mu , ϕ)
apply Hwfp. Qed. (* mu X. base \/ step X *) (* [Nats] = mu X. 0 \/ succ X *) (* [Nats] = \{ x | \ex x0,x1,..x_n . x0 \in 0 /\ x(i+1) \in succ xi }*) (* 0, 1, 2,... x*) Section inductive_generation. Context (base step : Pattern). Let patt_ind_gen_body := (patt_or (nest_mu base) (patt_app (nest_mu step) (patt_bound_svar 0))). Let patt_ind_gen_simple_body := (patt_or base (patt_app step (patt_free_svar (fresh_svar patt_ind_gen_body)))). Definition patt_ind_gen := patt_mu patt_ind_gen_body. Hypothesis (Hwfpbase : well_formed_positive base). Hypothesis (Hwfpstep : well_formed_positive step).
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

well_formed_positive patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

well_formed_positive patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

well_formed_positive (mu , patt_ind_gen_body)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

[&& no_negative_occurrence_db_b 0 patt_ind_gen_body, well_formed_positive (nest_mu base) && true, well_formed_positive (nest_mu step) & true]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

[&& no_negative_occurrence_db_b 0 patt_ind_gen_body, well_formed_positive (nest_mu base) & well_formed_positive (nest_mu step)]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

[&& no_negative_occurrence_db_b 0 patt_ind_gen_body, well_formed_positive base & well_formed_positive step]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

[&& no_negative_occurrence_db_b 0 patt_ind_gen_body, true & well_formed_positive step]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

[&& no_negative_occurrence_db_b 0 patt_ind_gen_body, true & true]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

no_negative_occurrence_db_b 0 patt_ind_gen_body
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

[&& (fix no_negative_occurrence_db_b (dbi : db_index) (ϕ : Pattern) {struct ϕ} : bool := match ϕ with | ϕ₁ $ ϕ₂ => no_negative_occurrence_db_b dbi ϕ₁ && no_negative_occurrence_db_b dbi ϕ₂ | ϕ₁ ---> ϕ₂ => no_positive_occurrence_db_b dbi ϕ₁ && no_negative_occurrence_db_b dbi ϕ₂ | ex , ϕ' => no_negative_occurrence_db_b dbi ϕ' | mu , ϕ' => no_negative_occurrence_db_b (S dbi) ϕ' | _ => true end with no_positive_occurrence_db_b (dbi : db_index) (ϕ : Pattern) {struct ϕ} : bool := match ϕ with | patt_bound_svar n => if decide (n = dbi) then false else true | ϕ₁ $ ϕ₂ => no_positive_occurrence_db_b dbi ϕ₁ && no_positive_occurrence_db_b dbi ϕ₂ | ϕ₁ ---> ϕ₂ => no_negative_occurrence_db_b dbi ϕ₁ && no_positive_occurrence_db_b dbi ϕ₂ | ex , ϕ' => no_positive_occurrence_db_b dbi ϕ' | mu , ϕ' => no_positive_occurrence_db_b (S dbi) ϕ' | _ => true end for no_negative_occurrence_db_b) 0 (nest_mu base) && true, no_negative_occurrence_db_b 0 (nest_mu step) & true]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

[&& no_negative_occurrence_db_b 0 (nest_mu base) && true, no_negative_occurrence_db_b 0 (nest_mu step) & true]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

[&& (if decide (0 < 0) then no_negative_occurrence_db_b 0 base else if decide (0 < 0 + 1) then true else no_negative_occurrence_db_b (0 - 1) base) && true, if decide (0 < 0) then no_negative_occurrence_db_b 0 step else if decide (0 < 0 + 1) then true else no_negative_occurrence_db_b (0 - 1) step & true]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step

true
auto. Qed.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar

svar_is_fresh_in X patt_ind_gen_body → eval ρ (svar_open 0 X patt_ind_gen_body) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar

svar_is_fresh_in X patt_ind_gen_body → eval ρ (svar_open 0 X patt_ind_gen_body) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr: svar_is_fresh_in X patt_ind_gen_body

eval ρ (svar_open 0 X patt_ind_gen_body) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr: X ∉ free_svars patt_ind_gen_body

eval ρ (svar_open 0 X patt_ind_gen_body) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr: X ∉ free_svars (nest_mu base) ∪ ∅ ∪ (free_svars (nest_mu step) ∪ ∅)

eval ρ (svar_open 0 X patt_ind_gen_body) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr: X ∉ free_svars base ∪ free_svars step

eval ρ (svar_open 0 X patt_ind_gen_body) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr: (X ∉ free_svars base) ∧ X ∉ free_svars step

eval ρ (svar_open 0 X patt_ind_gen_body) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr1: X ∉ free_svars base
Hfr2: X ∉ free_svars step

eval ρ (svar_open 0 X patt_ind_gen_body) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr1: X ∉ free_svars base
Hfr2: X ∉ free_svars step

eval ρ (svar_open 0 X (nest_mu base or nest_mu step $ BoundVarSugar.B0)) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr1: X ∉ free_svars base
Hfr2: X ∉ free_svars step

eval ρ (bsvar_subst (nest_mu base or nest_mu step $ BoundVarSugar.B0) (patt_free_svar X) 0) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr1: X ∉ free_svars base
Hfr2: X ∉ free_svars step

eval ρ (bsvar_subst (nest_mu base) (patt_free_svar X) 0 or bsvar_subst (nest_mu step) (patt_free_svar X) 0 $ bsvar_subst BoundVarSugar.B0 (patt_free_svar X) 0) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr1: X ∉ free_svars base
Hfr2: X ∉ free_svars step

eval ρ (bsvar_subst (nest_mu base) (patt_free_svar X) 0 or bsvar_subst (nest_mu step) (patt_free_svar X) 0 $ patt_free_svar X) = eval ρ (base or step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr1: X ∉ free_svars base
Hfr2: X ∉ free_svars step

eval ρ (bsvar_subst (nest_mu base) (patt_free_svar X) 0) ∪ eval ρ (bsvar_subst (nest_mu step) (patt_free_svar X) 0 $ patt_free_svar X) = eval ρ base ∪ eval ρ (step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr1: X ∉ free_svars base
Hfr2: X ∉ free_svars step

eval ρ (bsvar_subst (nest_mu_aux 0 1 base) (patt_free_svar X) 0) ∪ eval ρ (bsvar_subst (nest_mu_aux 0 1 step) (patt_free_svar X) 0 $ patt_free_svar X) = eval ρ base ∪ eval ρ (step $ patt_free_svar X)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
X: svar
Hfr1: X ∉ free_svars base
Hfr2: X ∉ free_svars step

eval ρ base ∪ eval ρ (step $ patt_free_svar X) = eval ρ base ∪ eval ρ (step $ patt_free_svar X)
reflexivity. Qed. Section with_eval. Context (M : @Model Σ). Context (ρ : @Valuation Σ M). Let F := let X := fresh_svar patt_ind_gen_body in @Fassoc Σ M ρ (svar_open 0 X patt_ind_gen_body) X. (* Lemma svar_open_patt_ind_gen_body_assoc S: let X := fresh_svar patt_ind_gen_body in eval ρₑ (update_svar_val X S ρₛ) (svar_open 0 X patt_ind_gen_body) = F S. Proof. reflexivity. (* cbv zeta. rewrite svar_open_patt_ind_gen_body_simpl. { apply set_svar_fresh_is_fresh. } subst F. unfold Fassoc. rewrite svar_open_patt_ind_gen_body_simpl. { apply set_svar_fresh_is_fresh. } reflexivity.*) Qed. *) (* I can imagine this lemma to be proven automatically. *)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

F = (λ A : propset M, eval ρ base ∪ app_ext (eval ρ step) A)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

F = (λ A : propset M, eval ρ base ∪ app_ext (eval ρ step) A)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

Fassoc ρ (svar_open 0 (fresh_svar patt_ind_gen_body) patt_ind_gen_body) (fresh_svar patt_ind_gen_body) = (λ A : propset M, eval ρ base ∪ app_ext (eval ρ step) A)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

(λ S : propset M, eval (update_svar_val (fresh_svar patt_ind_gen_body) S ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) patt_ind_gen_body)) = (λ A : propset M, eval ρ base ∪ app_ext (eval ρ step) A)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

x : propset M, eval (update_svar_val (fresh_svar patt_ind_gen_body) x ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) patt_ind_gen_body) = eval ρ base ∪ app_ext (eval ρ step) x
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) patt_ind_gen_body) = eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) patt_ind_gen_body
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M
eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) (base or step $ patt_free_svar (fresh_svar patt_ind_gen_body)) = eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) patt_ind_gen_body
apply set_svar_fresh_is_fresh.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) (base or step $ patt_free_svar (fresh_svar patt_ind_gen_body)) = eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) base ∪ eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) (step $ patt_free_svar (fresh_svar patt_ind_gen_body)) = eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) base ∪ app_ext (eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) step) (eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) (patt_free_svar (fresh_svar patt_ind_gen_body))) = eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) base ∪ app_ext (eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) step) (svar_valuation (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) (fresh_svar patt_ind_gen_body)) = eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) base ∪ app_ext (eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) step) A = eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M
eval ρ base ∪ app_ext (eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) step) A = eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

free_svars base ⊆ free_svars ?ϕ₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M
svar_is_fresh_in (fresh_svar patt_ind_gen_body) ?ϕ₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) ?ϕ₂
apply set_svar_fresh_is_fresh.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

free_svars base ⊆ free_svars patt_ind_gen_body
solve_free_svars_inclusion 5.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

eval ρ base ∪ app_ext (eval (update_svar_val (fresh_svar patt_ind_gen_body) A ρ) step) A = eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M
eval ρ base ∪ app_ext (eval ρ step) A = eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

free_svars step ⊆ free_svars ?ϕ₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M
svar_is_fresh_in (fresh_svar patt_ind_gen_body) ?ϕ₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) ?ϕ₂
apply set_svar_fresh_is_fresh.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

free_svars step ⊆ free_svars patt_ind_gen_body
solve_free_svars_inclusion 5.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
A: propset M

eval ρ base ∪ app_ext (eval ρ step) A = eval ρ base ∪ app_ext (eval ρ step) A
reflexivity. Qed. Definition is_witnessing_sequence_old (m : Domain M) (l : list (Domain M)) := (last l = Some m) /\ (match l with | [] => False | m₀::ms => (m₀ ∈ @eval Σ M ρ base) /\ (@Forall _ (λ (x : (Domain M) * (Domain M)), let (old, new) := x in new ∈ app_ext (@eval Σ M ρ step) {[ old ]} ) (zip (m₀::ms) ms) ) end). Definition is_witnessing_sequence (m : Domain M) (l : list (Domain M)) := ( lst, last l = Some lst /\ lst ∈ @eval Σ M ρ base) /\ hd_error l = Some m /\ ((@Forall _ (uncurry (λ new old, new ∈ app_ext (@eval Σ M ρ step) {[old]} )) (zip l (tail l)) )). (* If we have a witnessing sequence x₁ x₂ ... xₙ xₙ₊₁ ... xlast and xₙ matches `base`, then xₙ xₙ₊₁ is a witnessing sequence, too. *)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m': M

is_witnessing_sequence m l → l !! n = Some m' → m' ∈ eval ρ base → is_witnessing_sequence m' (drop n l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m': M

is_witnessing_sequence m l → l !! n = Some m' → m' ∈ eval ρ base → is_witnessing_sequence m' (drop n l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

is_witnessing_sequence m' (drop n l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

lst : M, last (drop n l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base
head (drop n l) = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (drop n l) (tail (drop n l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

lst : M, last (drop n l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

last (drop n l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

last (drop n l) = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base
lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

Some lst = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base
last l = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base
n < length l
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base
lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

Some lst = Some lst
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

last l = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base
n < length l
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base
lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

last l = Some lst
apply Hlst.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

n < length l
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base
lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

n < length l
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

is_Some (l !! n)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

is_Some (Some m')
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

Some m' = Some m'
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

lst ∈ eval ρ base
apply Hbase.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

head (drop n l) = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (drop n l) (tail (drop n l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

head (drop n l) = Some m'
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (drop n l) (tail (drop n l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

head (drop n l) = Some m'
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

l !! n = Some m'
apply Hm'.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (drop n l) (tail (drop n l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (drop n l) (tail (drop n l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (drop n l) (drop n (tail l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (drop n (zip l (tail l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
n: nat
m', lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hm': l !! n = Some m'
Hbase': m' ∈ eval ρ base

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
apply Hfa. } Qed.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m': M

is_witnessing_sequence m l → head (tail l) = Some m' → is_witnessing_sequence m' (tail l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m': M

is_witnessing_sequence m l → head (tail l) = Some m' → is_witnessing_sequence m' (tail l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m': M
Hw: is_witnessing_sequence m l
Hhead: head (tail l) = Some m'

is_witnessing_sequence m' (tail l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m': M
Hw: ( lst : M, last l = Some lst ∧ lst ∈ eval ρ base) ∧ head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

is_witnessing_sequence m' (tail l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

is_witnessing_sequence m' (tail l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

( lst : M, last (tail l) = Some lst ∧ lst ∈ eval ρ base) ∧ head (tail l) = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (tail l) (tail (tail l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

lst : M, last (tail l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'
head (tail l) = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (tail l) (tail (tail l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

lst : M, last (tail l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

last (tail l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

last (tail l) = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'
lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

last (tail l) = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

last l = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'
head (tail l) = Some ?m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

last l = Some lst
apply Hlst1.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

head (tail l) = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (tail l) (tail (tail l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

head (tail l) = Some m'
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (tail l) (tail (tail l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

head (tail l) = Some m'
apply Hhead.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (tail l) (tail (tail l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (tail (zip l (tail l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw: head l = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
m', lst: M
Hlst1: last l = Some lst
Hlst2: lst ∈ eval ρ base
Hw1: head l = Some m
Hw2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
Hhead: head (tail l) = Some m'

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
apply Hw2. Qed.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M

is_witnessing_sequence m l ↔ is_witnessing_sequence_old m (reverse l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M

is_witnessing_sequence m l ↔ is_witnessing_sequence_old m (reverse l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M

uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
is_witnessing_sequence m l ↔ is_witnessing_sequence_old m (reverse l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M

uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M

x : M * M, uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) x = (let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
x₁, x₂: M

uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (x₁, x₂) = (x₂ ∈ app_ext (eval ρ step) {[x₁]})
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})

is_witnessing_sequence m l ↔ is_witnessing_sequence_old m (reverse l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})

is_witnessing_sequence m l → is_witnessing_sequence_old m (reverse l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
is_witnessing_sequence_old m (reverse l) → is_witnessing_sequence m l
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})

is_witnessing_sequence m l → is_witnessing_sequence_old m (reverse l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last l = Some m'
Hbase: m' ∈ eval ρ base
Hhd: head l = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))

is_witnessing_sequence_old m (reverse l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last [] = Some m'
Hbase: m' ∈ eval ρ base
Hhd: head [] = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))

is_witnessing_sequence_old m (reverse [])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (x :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hhd: head (x :: l) = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (x :: l) (tail (x :: l)))
is_witnessing_sequence_old m (reverse (x :: l))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last [] = Some m'
Hbase: m' ∈ eval ρ base
Hhd: head [] = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))

is_witnessing_sequence_old m (reverse [])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last [] = Some m'
Hbase: m' ∈ eval ρ base
Hhd: None = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))

is_witnessing_sequence_old m (reverse [])
inversion Hhd.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (x :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hhd: head (x :: l) = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (x :: l) (tail (x :: l)))

is_witnessing_sequence_old m (reverse (x :: l))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (x :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hhd: Some x = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (x :: l) (tail (x :: l)))

is_witnessing_sequence_old m (reverse (x :: l))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (x :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hhd: Some x = Some m
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (x :: l) (tail (x :: l)))
H0: x = m

is_witnessing_sequence_old m (reverse (m :: l))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
Hhd: Some m = Some m

is_witnessing_sequence_old m (reverse (m :: l))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))

is_witnessing_sequence_old m (reverse (m :: l))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))

last (reverse (m :: l)) = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
match reverse (m :: l) with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))

last (reverse (m :: l)) = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))

last (reverse l ++ [m]) = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))

Some m = Some m
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))

match reverse (m :: l) with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
(* reverse (m::l) <> nil *)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
Heq: reverse (m :: l) = []

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: reverse (m :: l) = d :: l0
d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
Heq: reverse (m :: l) = []

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
Heq: reverse (m :: l) = []

length (reverse (m :: l)) = length []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
Heq: reverse (m :: l) = []
H: length (reverse (m :: l)) = length []
False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
Heq: reverse (m :: l) = []

length (reverse (m :: l)) = length []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
Heq: reverse (m :: l) = []

length [] = length []
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
Heq: reverse (m :: l) = []
H: length (reverse (m :: l)) = length []

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
Heq: reverse (m :: l) = []
H: length (m :: l) = length []

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
Heq: reverse (m :: l) = []
H: S (length l) = 0

False
inversion H.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: reverse (m :: l) = d :: l0

d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: reverse (m :: l) = d :: l0

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: reverse (m :: l) = d :: l0
Hm'd: m' = d
d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: reverse (m :: l) = d :: l0

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: reverse l ++ [m] = d :: l0

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: reverse l ++ [m] = d :: l0
H: last (m :: l) = head (reverse l ++ [m])

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: reverse l ++ [m] = d :: l0
H: Some m' = head (reverse l ++ [m])

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: rev_append l [] ++ [m] = d :: l0
H: Some m' = head (reverse l ++ [m])

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: rev_append l [] ++ [m] = d :: l0
H: Some m' = head (d :: l0)

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: rev_append l [] ++ [m] = d :: l0
H: Some m' = Some d

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: rev_append l [] ++ [m] = d :: l0
H: Some m' = Some d
H1: m' = d

d = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hbase: d ∈ eval ρ base
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: rev_append l [] ++ [m] = d :: l0
H: Some d = Some d

d = d
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
m': M
Hlast: last (m :: l) = Some m'
Hbase: m' ∈ eval ρ base
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
d: M
l0: list M
Heq: reverse (m :: l) = d :: l0
Hm'd: m' = d

d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hbase: d ∈ eval ρ base
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0

d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hbase: d ∈ eval ρ base
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0

d ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hbase: d ∈ eval ρ base
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hbase: d ∈ eval ρ base
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0

d ∈ eval ρ base
apply Hbase.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hbase: d ∈ eval ρ base
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0
Heq': reverse (reverse (m :: l)) = reverse (d :: l0)

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0
Heq': m :: l = reverse (d :: l0)

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0
Heq': m :: l = reverse (d :: l0)

l0 = tail (d :: l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0
Heq': m :: l = reverse (d :: l0)
Heq'': l0 = tail (d :: l0)
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0
Heq': m :: l = reverse (d :: l0)

l0 = tail (d :: l0)
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0
Heq': m :: l = reverse (d :: l0)
Heq'': l0 = tail (d :: l0)

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) l0)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0
Heq': m :: l = reverse (d :: l0)
Heq'': l0 = tail (d :: l0)

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) (tail (d :: l0)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0
Heq': m :: l = reverse (d :: l0)

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l0) (tail (d :: l0)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
l0: list M
Heq: reverse (m :: l) = d :: l0
Heq': m :: l = reverse (d :: l0)

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (reverse (m :: l)) (tail (reverse (m :: l))))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (reverse (m :: l)) (tail (reverse (m :: l))))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hlast: last (m :: l) = Some d
Hfa: Forall (uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}))) (zip (reverse (m :: l)) (tail (reverse (m :: l))))

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (reverse (m :: l)) (tail (reverse (m :: l))))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hfa: Forall (uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}))) (zip (reverse (m :: l)) (tail (reverse (m :: l))))

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (reverse (m :: l)) (tail (reverse (m :: l))))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
d: M
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (reverse (m :: l)) (tail (reverse (m :: l))))

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (reverse (m :: l)) (tail (reverse (m :: l))))
apply Hfa.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})

is_witnessing_sequence_old m (reverse l) → is_witnessing_sequence m l
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
H: is_witnessing_sequence_old m (reverse l)

is_witnessing_sequence m l
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
Hlast: last (reverse l) = Some m
H2: match reverse l with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end

is_witnessing_sequence m l
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
Hlast: last (reverse []) = Some m
H2: match reverse [] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end

is_witnessing_sequence m []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
Hlast: last (reverse (x :: l)) = Some m
H2: match reverse (x :: l) with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
is_witnessing_sequence m (x :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
Hlast: last (reverse []) = Some m
H2: match reverse [] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end

is_witnessing_sequence m []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
Hlast: None = Some m
H2: match reverse [] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end

is_witnessing_sequence m []
inversion Hlast.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
Hlast: last (reverse (x :: l)) = Some m
H2: match reverse (x :: l) with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end

is_witnessing_sequence m (x :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
Heq: reverse (x :: l) = []
Hlast: last [] = Some m
H2: False

is_witnessing_sequence m (x :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Heq: reverse (x :: l) = y :: ys
Hlast: last (y :: ys) = Some m
H2: y ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
is_witnessing_sequence m (x :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
Heq: reverse (x :: l) = []
Hlast: last [] = Some m
H2: False

is_witnessing_sequence m (x :: l)
inversion H2.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Heq: reverse (x :: l) = y :: ys
Hlast: last (y :: ys) = Some m
H2: y ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)

is_witnessing_sequence m (x :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Heq: reverse (x :: l) = y :: ys
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)

is_witnessing_sequence m (x :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: reverse (x :: l) = reverse (reverse (y :: ys))

is_witnessing_sequence m (x :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

is_witnessing_sequence m (x :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: reverse (x :: l) = reverse (reverse (y :: ys))
Inj eq eq reverse
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

is_witnessing_sequence m (x :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

lst : M, last (x :: l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
head (x :: l) = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (x :: l) (tail (x :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

lst : M, last (x :: l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

last (x :: l) = Some y ∧ y ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

last (x :: l) = Some y
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
y ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

last (reverse (y :: ys)) = Some y
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
y ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

head (y :: ys) = Some y
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
y ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

y ∈ eval ρ base
apply Hbase.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

head (x :: l) = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (x :: l) (tail (x :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

head (x :: l) = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (x :: l) (tail (x :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

head (x :: l) = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

head (reverse (y :: ys)) = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

last (y :: ys) = Some m
apply Hlast.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (x :: l) (tail (x :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

(λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
Hfeq': (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}))
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (x :: l) (tail (x :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

(λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)

x : M, (λ old : M, x ∈ app_ext (eval ρ step) {[old]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) x
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
x0: M

(λ old : M, x0 ∈ app_ext (eval ρ step) {[old]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) x0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
x0: M

x : M, (x0 ∈ app_ext (eval ρ step) {[x]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) x0 x
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
x0, x1: M

(x0 ∈ app_ext (eval ρ step) {[x1]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) x0 x1
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
Hfeq': (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}))

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (x :: l) (tail (x :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
Hfeq': (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}))

Forall (uncurry (flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})))) (zip (x :: l) (tail (x :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
Hfeq': (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}))

Forall (uncurry (flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})))) (zip (reverse (y :: ys)) (tail (reverse (y :: ys))))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
Hfeq': (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}))

Forall (uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}))) (zip (y :: ys) (tail (y :: ys)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x: M
l: list M
Feq: uncurry (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) = (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]})
y: M
ys: list M
Hlast: last (y :: ys) = Some m
Hbase: y ∈ eval ρ base
Hfa: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) ys)
Heq: x :: l = reverse (y :: ys)
Hfeq': (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) = flip (flip (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}))

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (y :: ys) (tail (y :: ys)))
apply Hfa. Qed.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
l: list M

is_witnessing_sequence m l ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
l: list M

is_witnessing_sequence m l ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
l: list M

is_witnessing_sequence m l ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) → is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
l: list M
is_witnessing_sequence m' (m' :: l) ∧ l ≠ [] → is_witnessing_sequence m l ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
l: list M

is_witnessing_sequence m l ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) → is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
l: list M
lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
l: list M
lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

is_witnessing_sequence m' (m' :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
l: list M
lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
l ≠ []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
l: list M
lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

l ≠ []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', lst: M
Hlst: last [] = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head [] = Some m
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

[] ≠ []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', d: M
l: list M
lst: M
Hlst: last (d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head (d :: l) = Some m
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l)))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
d :: l ≠ []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', lst: M
Hlst: last [] = Some lst
Hbase: lst ∈ eval ρ base
Hhd: None = Some m
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

[] ≠ []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', d: M
l: list M
lst: M
Hlst: last (d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head (d :: l) = Some m
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l)))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
d :: l ≠ []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', d: M
l: list M
lst: M
Hlst: last (d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head (d :: l) = Some m
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l)))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

d :: l ≠ []
discriminate.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
l: list M
lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hhd: head l = Some m
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

is_witnessing_sequence m' (m' :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
l: list M
lst: M
Hlst: last l = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l))

m : M, head l = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hlst: last [] = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
m: M
Hhd: head [] = Some m
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

is_witnessing_sequence m' [m']
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
a: M
l: list M
lst: M
Hlst: last (a :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (a :: l) (tail (a :: l)))
IHl: last l = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l)) → m : M, head l = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: l)
m: M
Hhd: head (a :: l) = Some m
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
is_witnessing_sequence m' (m' :: a :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hlst: last [] = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
m: M
Hhd: head [] = Some m
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

is_witnessing_sequence m' [m']
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hlst: last [] = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
m: M
Hhd: None = Some m
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

is_witnessing_sequence m' [m']
inversion Hhd.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
a: M
l: list M
lst: M
Hlst: last (a :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (a :: l) (tail (a :: l)))
IHl: last l = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l)) → m : M, head l = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: l)
m: M
Hhd: head (a :: l) = Some m
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

is_witnessing_sequence m' (m' :: a :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
a: M
l: list M
lst: M
Hlst: last (a :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (a :: l) (tail (a :: l)))
IHl: last l = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l)) → m : M, head l = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: l)
m: M
Hhd: Some a = Some m
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

is_witnessing_sequence m' (m' :: a :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
a: M
l: list M
lst: M
Hlst: last (a :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (a :: l) (tail (a :: l)))
IHl: last l = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l)) → m : M, head l = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: l)
m: M
Hhd: Some a = Some m
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H0: a = m

is_witnessing_sequence m' (m' :: m :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
l: list M
lst, m: M
Hhd: Some m = Some m
Hlst: last (m :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
IHl: last l = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l)) → m : M, head l = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

is_witnessing_sequence m' (m' :: m :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
l: list M
lst, m: M
Hlst: last (m :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
IHl: last l = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l)) → m : M, head l = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

is_witnessing_sequence m' (m' :: m :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
l: list M
lst, m: M
Hlst: last (m :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l) (tail (m :: l)))
IHl: last l = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l (tail l)) → m : M, head l = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

( lst : M, last (m' :: m :: l) = Some lst ∧ lst ∈ eval ρ base) ∧ head (m' :: m :: l) = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m' :: m :: l) (tail (m' :: m :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst, m: M
Hlst: last [m] = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

( lst : M, last [m'; m] = Some lst ∧ lst ∈ eval ρ base) ∧ head [m'; m] = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m'; m] (tail [m'; m]))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
( lst : M, last (m' :: m :: d :: l) = Some lst ∧ lst ∈ eval ρ base) ∧ head (m' :: m :: d :: l) = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst, m: M
Hlst: last [m] = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

( lst : M, last [m'; m] = Some lst ∧ lst ∈ eval ρ base) ∧ head [m'; m] = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m'; m] (tail [m'; m]))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst, m: M
Hlst: Some m = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

( lst : M, last [m'; m] = Some lst ∧ lst ∈ eval ρ base) ∧ head [m'; m] = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m'; m] (tail [m'; m]))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst, m: M
Hlst: Some m = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H0: m = lst

( lst0 : M, last [m'; lst] = Some lst0 ∧ lst0 ∈ eval ρ base) ∧ head [m'; lst] = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m'; lst] (tail [m'; lst]))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hlst: Some lst = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

( lst0 : M, last [m'; lst] = Some lst0 ∧ lst0 ∈ eval ρ base) ∧ head [m'; lst] = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m'; lst] (tail [m'; lst]))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

( lst0 : M, last [m'; lst] = Some lst0 ∧ lst0 ∈ eval ρ base) ∧ head [m'; lst] = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m'; lst] (tail [m'; lst]))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

lst0 : M, last [m'; lst] = Some lst0 ∧ lst0 ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
head [m'; lst] = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m'; lst] (tail [m'; lst]))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

lst0 : M, last [m'; lst] = Some lst0 ∧ lst0 ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

last [m'; lst] = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

Some lst = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

Some lst = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

lst ∈ eval ρ base
apply Hbase.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

head [m'; lst] = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m'; lst] (tail [m'; lst]))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

Some m' = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) [(m', lst)]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

Some m' = Some m'
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) [(m', lst)]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) [(m', lst)]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', lst) ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', lst)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

re : M, step' ∈ eval ρ step ∧ re ∈ {[lst]} ∧ m' ∈ app_interp step' re
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

step' ∈ eval ρ step ∧ lst ∈ {[lst]} ∧ m' ∈ app_interp step' lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

step' ∈ eval ρ step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
lst ∈ {[lst]} ∧ m' ∈ app_interp step' lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

lst ∈ {[lst]} ∧ m' ∈ app_interp step' lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

lst ∈ {[lst]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
m' ∈ app_interp step' lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

m' ∈ app_interp step' lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
lst: M
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [lst] (tail [lst]))
IHl: last [] = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail [])) → m : M, head [] = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' [m']
m', step': M
Hm': m' ∈ app_interp step' lst
Hstep': step' ∈ eval ρ step

True
exact I.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

( lst : M, last (m' :: m :: d :: l) = Some lst ∧ lst ∈ eval ρ base) ∧ head (m' :: m :: d :: l) = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

lst : M, last (m' :: m :: d :: l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
head (m' :: m :: d :: l) = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

lst : M, last (m' :: m :: d :: l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

last (m' :: m :: d :: l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

last (m' :: m :: d :: l) = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

last (d :: l) = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

last (d :: l) = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

lst ∈ eval ρ base
apply Hbase.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

head (m' :: m :: d :: l) = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

head (m' :: m :: d :: l) = Some m'
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

head (m' :: m :: d :: l) = Some m'
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m', m) :: (m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: l) (tail (d :: l))) → m : M, head (d :: l) = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', m) ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (m :: d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', m) ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
IHl: last (d :: l) = Some lst → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', m) ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
IHl: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', m) ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
IHl: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
x: (M * M)%type
l0: list (M * M)
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
H: x = (m, d)
H0: l0 = match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', m) ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (d :: l) = Some lst
Hbase: lst ∈ eval ρ base
Hwit: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
IHl: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', m) ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (d :: l) = Some lst
Hbase: lst ∈ eval ρ base
IHl: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', m) ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hlst: last (d :: l) = Some lst
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', m) ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', m) ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m', m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

re : M, step' ∈ eval ρ step ∧ re ∈ {[m]} ∧ m' ∈ app_interp step' re
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

step' ∈ eval ρ step ∧ m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

step' ∈ eval ρ step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

m ∈ {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

m' ∈ app_interp step' m
apply Hm'.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d) ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
apply H1.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m : M, Some d = Some m → m' step' : M, m' ∈ app_interp step' m → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m' step' : M, m' ∈ app_interp step' d → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m' step' : M, m' ∈ app_interp step' d → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
step'', d'': M
Hstep'': step'' ∈ eval ρ step
Hd'': d'' ∈ {[d]}
Hstep''d'': m ∈ app_interp step'' d''

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m' step' : M, m' ∈ app_interp step' d → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
step'', d'': M
Hstep'': step'' ∈ eval ρ step
Hd'': d'' ∈ {[d]}
Hstep''d'': m ∈ app_interp step'' d''
H: d = d''

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d'', x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m' step' : M, m' ∈ app_interp step' d → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
step'': M
Hstep'': step'' ∈ eval ρ step
Hstep''d'': m ∈ app_interp step'' d
Hd'': d ∈ {[d]}

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: m' step' : M, m' ∈ app_interp step' d → step' ∈ eval ρ step → is_witnessing_sequence m' (m' :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
step'': M
Hstep'': step'' ∈ eval ρ step
Hstep''d'': m ∈ app_interp step'' d

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: is_witnessing_sequence m (m :: d :: l)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
step'': M
Hstep'': step'' ∈ eval ρ step
Hstep''d'': m ∈ app_interp step'' d

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: ( lst : M, last (m :: d :: l) = Some lst ∧ lst ∈ eval ρ base) ∧ head (m :: d :: l) = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l) (tail (m :: d :: l)))
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
step'': M
Hstep'': step'' ∈ eval ρ step
Hstep''d'': m ∈ app_interp step'' d

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
IHl: ( lst : M, last (d :: l) = Some lst ∧ lst ∈ eval ρ base) ∧ Some m = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
step'': M
Hstep'': step'' ∈ eval ρ step
Hstep''d'': m ∈ app_interp step'' d

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
Hforall: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
step'': M
Hstep'': step'' ∈ eval ρ step
Hstep''d'': m ∈ app_interp step'' d

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
Hforall: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
step'': M
Hstep'': step'' ∈ eval ρ step
Hstep''d'': m ∈ app_interp step'' d
x: (M * M)%type
l0: list (M * M)
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
H: x = (m, d)
H0: l0 = match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
d: M
l: list M
lst, m: M
Hbase: lst ∈ eval ρ base
Hforall: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
m', step': M
Hm': m' ∈ app_interp step' m
Hstep': step' ∈ eval ρ step
step'': M
Hstep'': step'' ∈ eval ρ step
Hstep''d'': m ∈ app_interp step'' d
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, d)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
apply H2.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
l: list M

is_witnessing_sequence m' (m' :: l) ∧ l ≠ [] → is_witnessing_sequence m l ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Abort.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) → last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m']) → is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) → last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit: is_witnessing_sequence_old m (x :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

last (x :: l) = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

last (x :: l) = Some m
apply Hwit1.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

last ((x :: l) ++ [m']) = Some m'
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
match (x :: l) ++ [m'] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

last ((x :: l) ++ [m']) = Some m'
apply last_snoc.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

match (x :: l) ++ [m'] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

x ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

x ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

x ∈ eval ρ base
apply Hwit2.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit1: last (x :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: d :: l) (d :: l))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match (d :: l) ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ((d :: l) ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(x, m')]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m' ∈ app_ext (eval ρ step) {[x]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m' ∈ app_ext (eval ρ step) {[x]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

True
exact I.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m' ∈ app_ext (eval ρ step) {[x]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

re : M, step' ∈ eval ρ step ∧ re ∈ {[x]} ∧ m' ∈ app_interp step' re
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

step' ∈ eval ρ step ∧ x ∈ {[x]} ∧ m' ∈ app_interp step' x
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

step' ∈ eval ρ step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
x ∈ {[x]} ∧ m' ∈ app_interp step' x
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

step' ∈ eval ρ step
apply Hstep'.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

x ∈ {[x]} ∧ m' ∈ app_interp step' x
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

x ∈ {[x]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
m' ∈ app_interp step' x
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

x ∈ {[x]}
constructor.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: last [x] = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m' ∈ app_interp step' x
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: Some x = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m' ∈ app_interp step' x
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit1: Some x = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
H0: x = m

m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
Hwit2: m ∈ eval ρ base
Hwit1: Some m = Some m
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m' ∈ app_interp step' m
apply Hm'.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: d :: l) (d :: l))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match (d :: l) ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ((d :: l) ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: d :: l) (d :: l))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((x, d) :: match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: d :: l) (d :: l))
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

d ∈ app_ext (eval ρ step) {[x]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((x, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

d ∈ app_ext (eval ρ step) {[x]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((x, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
x0: (M * M)%type
l0: list (M * M)
H1: d ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
H: x0 = (x, d)
H0: l0 = match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

d ∈ app_ext (eval ρ step) {[x]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
Hwit3: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((x, d) :: match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end)
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
H1: d ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

d ∈ app_ext (eval ρ step) {[x]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
H1: d ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

d ∈ app_ext (eval ρ step) {[x]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Hd: d ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

d ∈ app_ext (eval ρ step) {[x]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Hd: d ∈ app_ext (eval ρ step) {[x]}
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

d ∈ app_ext (eval ρ step) {[x]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Hd: d ∈ app_ext (eval ρ step) {[x]}
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

d ∈ app_ext (eval ρ step) {[x]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Hd: d ∈ app_ext (eval ρ step) {[x]}
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Hd: d ∈ app_ext (eval ρ step) {[x]}
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

d ∈ app_ext (eval ρ step) {[x]}
apply Hd.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Hd: d ∈ app_ext (eval ρ step) {[x]}
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', d: M
l: list M
Hwit1: last (x :: d :: l) = Some m
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

d : M, last [x; d] = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [] → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip ([] ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d : M, last (x :: d :: a :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l) → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match (a :: l) ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip ((a :: l) ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

d : M, last [x; d] = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [] → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip ([] ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
D: M
Hm: last [x; D] = Some m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (D, x2) :: zip ([] ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
D: M
Hm: last [x; D] = Some m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(D, m')]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
D: M
Hm: Some D = Some m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(D, m')]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
D: M
Hm: Some D = Some m
H0: D = m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(m, m')]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Hm: Some m = Some m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(m, m')]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(m, m')]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m' ∈ app_ext (eval ρ step) {[m]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m' ∈ app_ext (eval ρ step) {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

True
exact I.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m' ∈ app_ext (eval ρ step) {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

re : M, step' ∈ eval ρ step ∧ re ∈ {[m]} ∧ m' ∈ app_interp step' re
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

step' ∈ eval ρ step ∧ m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

step' ∈ eval ρ step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

step' ∈ eval ρ step
apply Hstep'.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m ∈ {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m ∈ {[m]}
constructor.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m

m' ∈ app_interp step' m
apply Hm'.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end

d : M, last (x :: d :: a :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l) → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match (a :: l) ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip ((a :: l) ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match (a :: l) ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip ((a :: l) ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: match l ++ [m'] with | [] => [] | x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
x0: (M * M)%type
l0: list (M * M)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end
H: x0 = (d, a)
H0: l0 = match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: match l ++ [m'] with | [] => [] | x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: match l ++ [m'] with | [] => [] | x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2 end)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end

a ∈ app_ext (eval ρ step) {[d]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end

a ∈ app_ext (eval ρ step) {[d]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end

a ∈ app_ext (eval ρ step) {[d]}
apply H1.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end

last (x :: a :: l) = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end

last (x :: a :: l) = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end

last (a :: l) = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m', a: M
l: list M
Hwit2: x ∈ eval ρ base
step': M
Hstep': step' ∈ eval ρ step
Hm': m' ∈ app_interp step' m
IHl: d : M, last (x :: d :: l) = Some m → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (d, x2) :: zip l l2 end → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2 end
d: M
Hlast: last (x :: d :: a :: l) = Some m
Hwit: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, a) :: zip (a :: l) l)
H1: a ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (a, x2) :: zip l l2 end
apply H2.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M

last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m']) → is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
H: is_witnessing_sequence_old m' ((x :: l) ++ [m'])

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
H: is_witnessing_sequence_old m' ((x :: l) ++ [m'])

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
H: match (x :: l) ++ [m'] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
H: match (x :: l) ++ [m'] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
len: nat
Heqlen: len = length l

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
H: match (x :: l) ++ [m'] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
len: nat
Heqlen: len = length l

length l ≤ len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
H: match (x :: l) ++ [m'] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
len: nat
Heqlen: len = length l
Hlen: length l ≤ len
is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
H: match (x :: l) ++ [m'] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
len: nat
Heqlen: len = length l

length l ≤ len
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
H: match (x :: l) ++ [m'] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
len: nat
Heqlen: len = length l
Hlen: length l ≤ len

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
H: match (x :: l) ++ [m'] with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
len: nat
Hlen: length l ≤ len

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
H: x ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

last (x :: l) = Some m ∧ (x ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

last (x :: l) = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len
(x ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

last (x :: l) = Some m
apply Hlast.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

(x ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l)) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

x ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

x ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

x ∈ eval ρ base
apply Hbase.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hbase: x ∈ eval ρ base
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, x, m': M
l: list M
Hlast: last (x :: l) = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
len: nat
Hlen: length l ≤ len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat

(x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M

(x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ 0 → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
(x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ S len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M

(x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ 0 → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
l: list M
Hlast: last (x :: l) = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
Hlen: length l ≤ 0

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2 end
Hlen: length [] ≤ 0

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x, d: M
l: list M
Hlast: last (x :: d :: l) = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match (d :: l) ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ((d :: l) ++ [m']) l2 end
Hlen: length (d :: l) ≤ 0
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: d :: l) (d :: l)) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x, d: M
l: list M
Hlast: last (x :: d :: l) = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match (d :: l) ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ((d :: l) ++ [m']) l2 end
Hlen: length (d :: l) ≤ 0

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: d :: l) (d :: l)) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x, d: M
l: list M
Hlast: last (x :: d :: l) = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match (d :: l) ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ((d :: l) ++ [m']) l2 end
Hlen: S (length l) ≤ 0

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: d :: l) (d :: l)) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2 end
Hlen: length [] ≤ 0

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2 end
Hlen: length [] ≤ 0

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [] ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(x, m')]
Hlen: length [] ≤ 0

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [] ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(x, m')]
Hlen: length [] ≤ 0

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(x, m')]
Hlen: length [] ≤ 0
step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(x, m')]
Hlen: length [] ≤ 0

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(x, m')]
Hlen: length [] ≤ 0

True
exact I.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(x, m')]
Hlen: length [] ≤ 0

step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(x, m')]
Hlen: length [] ≤ 0
x0: (M * M)%type
l: list (M * M)
H1: m' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
H: x0 = (x, m')
H0: l = []

step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(x, m')]
Hlen: length [] ≤ 0
H1: m' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []

step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hlen: length [] ≤ 0
H1: m' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []

step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hlen: length [] ≤ 0
H1: m' ∈ app_ext (eval ρ step) {[x]}

step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hlen: length [] ≤ 0
step', m'': M
Hstep': step' ∈ eval ρ step
Hm'm'': m'' ∈ {[x]}
Hstep'm'': m' ∈ app_interp step' m''

step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', x: M
Hlast: last [x] = Some m
Hlen: length [] ≤ 0
step', m'': M
Hstep': step' ∈ eval ρ step
Hm'm'': m'' ∈ {[x]}
Hstep'm'': m' ∈ app_interp step' m''
H: x = m''

step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', m'': M
Hlast: last [m''] = Some m
Hlen: length [] ≤ 0
step': M
Hstep': step' ∈ eval ρ step
Hm'm'': m'' ∈ {[m'']}
Hstep'm'': m' ∈ app_interp step' m''

step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', m'': M
Hlast: last [m''] = Some m
Hlen: length [] ≤ 0
step': M
Hstep': step' ∈ eval ρ step
Hstep'm'': m' ∈ app_interp step' m''

step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', m'': M
Hlast: last [m''] = Some m
Hlen: length [] ≤ 0
step': M
Hstep': step' ∈ eval ρ step
Hstep'm'': m' ∈ app_interp step' m''

step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', m'': M
Hlast: last [m''] = Some m
Hlen: length [] ≤ 0
step': M
Hstep': step' ∈ eval ρ step
Hstep'm'': m' ∈ app_interp step' m''

step' ∈ eval ρ step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', m'': M
Hlast: last [m''] = Some m
Hlen: length [] ≤ 0
step': M
Hstep': step' ∈ eval ρ step
Hstep'm'': m' ∈ app_interp step' m''
m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', m'': M
Hlast: last [m''] = Some m
Hlen: length [] ≤ 0
step': M
Hstep': step' ∈ eval ρ step
Hstep'm'': m' ∈ app_interp step' m''

m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', m'': M
Hlast: Some m'' = Some m
Hlen: length [] ≤ 0
step': M
Hstep': step' ∈ eval ρ step
Hstep'm'': m' ∈ app_interp step' m''

m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m', m'': M
Hlast: Some m'' = Some m
Hlen: length [] ≤ 0
step': M
Hstep': step' ∈ eval ρ step
Hstep'm'': m' ∈ app_interp step' m''
H0: m'' = m

m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
Hlast: Some m = Some m
Hlen: length [] ≤ 0
step': M
Hstep': step' ∈ eval ρ step
Hstep'm'': m' ∈ app_interp step' m

m' ∈ app_interp step' m
apply Hstep'm''.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)

(x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ S len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
l: list M
Hlast: last (x :: l) = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end
Hlen: length l ≤ S len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2 end
Hlen: length [] ≤ S len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x, x': M
l': list M
Hlast: last (x :: x' :: l') = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match (x' :: l') ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ((x' :: l') ++ [m']) l2 end
Hlen: length (x' :: l') ≤ S len
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: x' :: l') (x' :: l')) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last [x] = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2 end
Hlen: length [] ≤ S len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: Some x = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2 end
Hlen: length [] ≤ S len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: Some x = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2 end
Hlen: length [] ≤ S len
H0: x = m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2 end
Hlen: length [] ≤ S len
H0: x = m

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match [] ++ [m'] with | [] => [] | x2 :: l2 => (m, x2) :: zip ([] ++ [m']) l2 end
Hlen: length [] ≤ S len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(m, m')]
Hlen: length [] ≤ S len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(m, m')]
Hlen: length [] ≤ S len
x: (M * M)%type
l: list (M * M)
H1: m' ∈ app_ext (eval ρ step) {[m]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
H: x = (m, m')
H0: l = []

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(m, m')]
Hlen: length [] ≤ S len
H1: m' ∈ app_ext (eval ρ step) {[m]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
H1: m' ∈ app_ext (eval ρ step) {[m]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
H1: m' ∈ app_ext (eval ρ step) {[m]}

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] []) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
H1: m' ∈ app_ext (eval ρ step) {[m]}

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [] ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
H1: m' ∈ app_ext (eval ρ step) {[m]}

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
H1: m' ∈ app_ext (eval ρ step) {[m]}
step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
H1: m' ∈ app_ext (eval ρ step) {[m]}

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
H1: m' ∈ app_ext (eval ρ step) {[m]}

True
exact I.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
H1: m' ∈ app_ext (eval ρ step) {[m]}

step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
step': M
Hstep': re : M, step' ∈ eval ρ step ∧ re ∈ {[m]} ∧ m' ∈ app_interp step' re

step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
step': M
Hstep': re : M, step' ∈ eval ρ step ∧ re ∈ {[m]} ∧ m' ∈ app_interp step' re

step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
step', m'': M
Hstep': step' ∈ eval ρ step
Hmm'': m'' ∈ {[m]}
Hm'': m' ∈ app_interp step' m''

step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
step', m'': M
Hstep': step' ∈ eval ρ step
Hmm'': m'' ∈ {[m]}
Hm'': m' ∈ app_interp step' m''

step' ∈ eval ρ step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
step', m'': M
Hstep': step' ∈ eval ρ step
Hmm'': m'' ∈ {[m]}
Hm'': m' ∈ app_interp step' m''
m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
step', m'': M
Hstep': step' ∈ eval ρ step
Hmm'': m'' ∈ {[m]}
Hm'': m' ∈ app_interp step' m''

step' ∈ eval ρ step
apply Hstep'.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
step', m'': M
Hstep': step' ∈ eval ρ step
Hmm'': m'' ∈ {[m]}
Hm'': m' ∈ app_interp step' m''

m' ∈ app_interp step' m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Hlen: length [] ≤ S len
step', m'': M
Hstep': step' ∈ eval ρ step
Hmm'': m'' ∈ {[m]}
Hm'': m' ∈ app_interp step' m''
H: m = m''

m' ∈ app_interp step' m''
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m': M
len: nat
m'': M
IHlen: (x : M) (l : list M), last (x :: l) = Some m'' → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m'')
Hlen: length [] ≤ S len
step': M
Hstep': step' ∈ eval ρ step
Hmm'': m'' ∈ {[m'']}
Hm'': m' ∈ app_interp step' m''

m' ∈ app_interp step' m''
apply Hm''.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x, x': M
l': list M
Hlast: last (x :: x' :: l') = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match (x' :: l') ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip ((x' :: l') ++ [m']) l2 end
Hlen: length (x' :: l') ≤ S len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: x' :: l') (x' :: l')) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: l) l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x, x': M
l': list M
Hlast: last (x :: x' :: l') = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((x, x') :: match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end)
Hlen: length (x' :: l') ≤ S len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: x' :: l') (x' :: l')) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (x, x2) :: zip l l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x, x': M
l': list M
Hlast: last (x :: x' :: l') = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((x, x') :: match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end)
Hlen: length (x' :: l') ≤ S len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: x' :: l') (x' :: l')) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (x, x2) :: zip l l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((x, x') :: match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end)
Hlen: length (x' :: l') ≤ S len

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: x' :: l') (x' :: l')) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (x, x2) :: zip l l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((x, x') :: match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end)
Hlen: length (x' :: l') ≤ S len
x0: (M * M)%type
l: list (M * M)
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end
H: x0 = (x, x')
H0: l = match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: x' :: l') (x' :: l')) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (x, x2) :: zip l l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hall: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((x, x') :: match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end)
Hlen: length (x' :: l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: x' :: l') (x' :: l')) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
IHlen: (x : M) (l : list M), last (x :: l) = Some m → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l ++ [m'] with | [] => [] | x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2 end → length l ≤ len → Forall (λ x0 : M * M, let (old, new) := x0 in new ∈ app_ext (eval ρ step) {[old]}) match l with | [] => [] | x2 :: l2 => (x, x2) :: zip l l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hlen: length (x' :: l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: x' :: l') (x' :: l')) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
x': M
l': list M
IHlen: length l' ≤ len → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last (x' :: l') = Some m
Hlen: length (x' :: l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (x :: x' :: l') (x' :: l')) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
x': M
l': list M
IHlen: length l' ≤ len → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last (x' :: l') = Some m
Hlen: length (x' :: l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((x, x') :: match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
x': M
l': list M
IHlen: length l' ≤ len → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last (x' :: l') = Some m
Hlen: length (x' :: l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

(x' ∈ app_ext (eval ρ step) {[x]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
x': M
l': list M
IHlen: length l' ≤ len → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last (x' :: l') = Some m
Hlen: length (x' :: l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

x' ∈ app_ext (eval ρ step) {[x]} ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
x': M
l': list M
IHlen: length l' ≤ len → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last (x' :: l') = Some m
Hlen: length (x' :: l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

x' ∈ app_ext (eval ρ step) {[x]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
x': M
l': list M
IHlen: length l' ≤ len → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last (x' :: l') = Some m
Hlen: length (x' :: l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
x': M
l': list M
IHlen: length l' ≤ len → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last (x' :: l') = Some m
Hlen: length (x' :: l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

x' ∈ app_ext (eval ρ step) {[x]}
apply H1.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
x': M
l': list M
IHlen: length l' ≤ len → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last (x' :: l') = Some m
Hlen: length (x' :: l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
x': M
l': list M
IHlen: length l' ≤ len → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last (x' :: l') = Some m
Hlen: length (x' :: l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

length l' ≤ len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, m': M
len: nat
x': M
l': list M
IHlen: length l' ≤ len → Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
x: M
Hlast: last (x' :: l') = Some m
Hlen: S (length l') ≤ S len
H1: x' ∈ app_ext (eval ρ step) {[x]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' ++ [m'] with | [] => [] | x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2 end

length l' ≤ len
lia. Qed. Definition witnessed_elements_old : propset (Domain M) := PropSet (λ m, l, is_witnessing_sequence_old m l).
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

F witnessed_elements_old ⊆ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

F witnessed_elements_old ⊆ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

x : M, x ∈ F witnessed_elements_old → x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
Hx: x ∈ F witnessed_elements_old

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
Hx: x ∈ Fassoc ρ (svar_open 0 (fresh_svar patt_ind_gen_body) patt_ind_gen_body) (fresh_svar patt_ind_gen_body) witnessed_elements_old

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
Hx: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) patt_ind_gen_body)

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
Hx: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (bsvar_subst patt_ind_gen_body (patt_free_svar (fresh_svar patt_ind_gen_body)) 0)

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
Hx: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) ((bsvar_subst (nest_mu base) (patt_free_svar (fresh_svar patt_ind_gen_body)) 0 ---> ⊥) ---> bsvar_subst (nest_mu step) (patt_free_svar (fresh_svar patt_ind_gen_body)) 0 $ patt_free_svar (fresh_svar patt_ind_gen_body))

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
Hx: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (bsvar_subst (nest_mu base) (patt_free_svar (fresh_svar patt_ind_gen_body)) 0) ∪ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (bsvar_subst (nest_mu step) (patt_free_svar (fresh_svar patt_ind_gen_body)) 0 $ patt_free_svar (fresh_svar patt_ind_gen_body))

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
Hx: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base)) ∪ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (bsvar_subst (nest_mu step) (patt_free_svar (fresh_svar patt_ind_gen_body)) 0 $ patt_free_svar (fresh_svar patt_ind_gen_body))

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
Hx: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base)) ∪ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step) $ patt_free_svar (fresh_svar patt_ind_gen_body))

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step) $ patt_free_svar (fresh_svar patt_ind_gen_body))
x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

x ∈ {[ m | l : list M, is_witnessing_sequence_old m l ]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

is_witnessing_sequence_old x [x]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

last [x] = Some x ∧ x ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

Some x = Some x ∧ x ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

Some x = Some x
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))
x ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

Some x = Some x
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

x ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

x ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
constructor.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

x ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval ρ (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))
x ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M

free_svars (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base)) ⊆ free_svars ?ϕ₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
svar_is_fresh_in (fresh_svar patt_ind_gen_body) ?ϕ₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) ?ϕ₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M

svar_is_fresh_in (fresh_svar patt_ind_gen_body) ?ϕ₂
auto.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M

free_svars (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base)) ⊆ free_svars patt_ind_gen_body
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M

free_svars (bsvar_subst (nest_mu base) (patt_free_svar (fresh_svar patt_ind_gen_body)) 0) ⊆ free_svars patt_ind_gen_body
solve_free_svars_inclusion 5.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval ρ (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

x ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval ρ (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu base))

x ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval ρ (bsvar_subst (nest_mu base) (patt_free_svar (fresh_svar patt_ind_gen_body)) 0)

x ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval ρ base

x ∈ eval ρ base
auto.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step) $ patt_free_svar (fresh_svar patt_ind_gen_body))

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step) $ patt_free_svar (fresh_svar patt_ind_gen_body))

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ app_ext (eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))) (eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (patt_free_svar (fresh_svar patt_ind_gen_body)))

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ app_ext (eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))) (svar_valuation (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (fresh_svar patt_ind_gen_body))

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ app_ext (eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))) witnessed_elements_old

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ {[ e | le re : M, le ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step)) ∧ re ∈ witnessed_elements_old ∧ e ∈ app_interp le re ]}

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
H2: m ∈ witnessed_elements_old
Happ: x ∈ app_interp step' m

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
H2: m ∈ {[ m | l : list M, is_witnessing_sequence_old m l ]}
Happ: x ∈ app_interp step' m

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
l: list M
Hl: is_witnessing_sequence_old m l
Happ: x ∈ app_interp step' m

x ∈ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
l: list M
Hl: is_witnessing_sequence_old m l
Happ: x ∈ app_interp step' m

x ∈ {[ m | l : list M, is_witnessing_sequence_old m l ]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
l: list M
Hl: is_witnessing_sequence_old m l
Happ: x ∈ app_interp step' m

is_witnessing_sequence_old x (l ++ [x])
(* `l` is not empty *)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
l: list M
Heql: l = []
Hl: is_witnessing_sequence_old m []
Happ: x ∈ app_interp step' m

is_witnessing_sequence_old x ([] ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m
is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
l: list M
Heql: l = []
Hl: is_witnessing_sequence_old m []
Happ: x ∈ app_interp step' m

is_witnessing_sequence_old x ([] ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
l: list M
Heql: l = []
Hl: is_witnessing_sequence_old m []
Happ: x ∈ app_interp step' m

is_witnessing_sequence_old x ([] ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
l: list M
Heql: l = []
H: last [] = Some m
H0: False
Happ: x ∈ app_interp step' m

is_witnessing_sequence_old x ([] ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
l: list M
Heql: l = []
H: None = Some m
H0: False
Happ: x ∈ app_interp step' m

is_witnessing_sequence_old x ([] ++ [x])
inversion H.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (svar_open 0 (fresh_svar patt_ind_gen_body) (nest_mu step))
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m

is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) (bsvar_subst (nest_mu step) (patt_free_svar (fresh_svar patt_ind_gen_body)) 0)
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m

is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m
H1: step' ∈ eval (update_svar_val (fresh_svar patt_ind_gen_body) witnessed_elements_old ρ) step

is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m

svar_is_fresh_in (fresh_svar patt_ind_gen_body) step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m
H1: step' ∈ eval ρ step
is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m

svar_is_fresh_in (fresh_svar patt_ind_gen_body) step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m

free_svars step ⊆ free_svars ?ϕ₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m
svar_is_fresh_in (fresh_svar patt_ind_gen_body) ?ϕ₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m

svar_is_fresh_in (fresh_svar patt_ind_gen_body) ?ϕ₂
apply set_svar_fresh_is_fresh.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m

free_svars step ⊆ free_svars patt_ind_gen_body
solve_free_svars_inclusion 2.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m
H1: step' ∈ eval ρ step

is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m
H1: step' ∈ eval ρ step
P: is_witnessing_sequence_old ?m (?x :: ?l) ∧ ( step'0 : M, step'0 ∈ eval ρ step ∧ ?m' ∈ app_interp step'0 ?m) ↔ last (?x :: ?l) = Some ?m ∧ is_witnessing_sequence_old ?m' ((?x :: ?l) ++ [?m'])

is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m
H1: step' ∈ eval ρ step
P: is_witnessing_sequence_old ?m (?x :: ?l) ∧ ( step'0 : M, step'0 ∈ eval ρ step ∧ ?m' ∈ app_interp step'0 ?m) → last (?x :: ?l) = Some ?m ∧ is_witnessing_sequence_old ?m' ((?x :: ?l) ++ [?m'])

is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x, step', m: M
l: list M
m₀: M
l': list M
Heql: l = m₀ :: l'
Hl: is_witnessing_sequence_old m (m₀ :: l')
Happ: x ∈ app_interp step' m
H1: step' ∈ eval ρ step
P: last (m₀ :: l') = Some m ∧ is_witnessing_sequence_old x ((m₀ :: l') ++ [x])

is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
apply P. Qed.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

eval ρ patt_ind_gen ⊆ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

eval ρ patt_ind_gen ⊆ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

well_formed_positive (mu , patt_ind_gen_body)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Fassoc ρ (svar_open 0 (fresh_svar patt_ind_gen_body) patt_ind_gen_body) (fresh_svar patt_ind_gen_body) witnessed_elements_old ⊆ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

well_formed_positive (mu , patt_ind_gen_body)
apply patt_ind_gen_wfp.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

Fassoc ρ (svar_open 0 (fresh_svar patt_ind_gen_body) patt_ind_gen_body) (fresh_svar patt_ind_gen_body) witnessed_elements_old ⊆ witnessed_elements_old
apply witnessed_elements_old_prefixpoint. Qed.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

let Sfix := eval ρ patt_ind_gen in F Sfix = Sfix
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

let Sfix := eval ρ patt_ind_gen in F Sfix = Sfix
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

well_formed_positive (mu , patt_ind_gen_body)
apply patt_ind_gen_wfp. Qed. Definition witnessed_elements_old_of_max_len len : propset (Domain M) := PropSet (λ m, l, is_witnessing_sequence_old m l /\ length l <= len).
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat

witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat

witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

witnessed_elements_old_of_max_len 1eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
witnessed_elements_old_of_max_len (S (S len)) ⊆ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

witnessed_elements_old_of_max_len 1eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

witnessed_elements_old_of_max_len 1eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M

m ∈ witnessed_elements_old_of_max_len 1 → m ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M

m ∈ witnessed_elements_old_of_max_len 1 → m ∈ F (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M

m ∈ witnessed_elements_old_of_max_len 1 → m ∈ F (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
H: m ∈ witnessed_elements_old_of_max_len 1

m ∈ F (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
H: m ∈ witnessed_elements_old_of_max_len 1

m ∈ F (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
H: m ∈ witnessed_elements_old_of_max_len 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Hwit: is_witnessing_sequence_old m l
Hlen: length l ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Hwit: is_witnessing_sequence_old m l
Hlen: length l ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
Hlast: last l = Some m
Hm: match l with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
Hlen: length l ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Hlast: last [] = Some m
Hm: False
Hlen: length [] ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, d: M
l: list M
Hlast: last (d :: l) = Some m
Hm: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l) l)
Hlen: length (d :: l) ≤ 1
m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Hlast: last [] = Some m
Hm: False
Hlen: length [] ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Hlast: None = Some m
Hm: False
Hlen: length [] ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
inversion Hlast.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, d: M
l: list M
Hlast: last (d :: l) = Some m
Hm: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l) l)
Hlen: length (d :: l) ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, d: M
Hlast: last [d] = Some m
Hm: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Hlen: length [d] ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, d, d0: M
l: list M
Hlast: last (d :: d0 :: l) = Some m
Hm: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: l) (d0 :: l))
Hlen: length (d :: d0 :: l) ≤ 1
m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, d, d0: M
l: list M
Hlast: last (d :: d0 :: l) = Some m
Hm: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: l) (d0 :: l))
Hlen: length (d :: d0 :: l) ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, d, d0: M
l: list M
Hlast: last (d :: d0 :: l) = Some m
Hm: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: l) (d0 :: l))
Hlen: S (S (length l)) ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, d: M
Hlast: last [d] = Some m
Hm: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Hlen: length [d] ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, d: M
Hlast: Some d = Some m
Hm: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Hlen: length [d] ≤ 1

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, d: M
Hlast: Some d = Some m
Hm: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Hlen: length [d] ≤ 1
H0: d = m

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m, d: M
Hm: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Hlen: length [d] ≤ 1
H0: d = m

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Hlen: length [m] ≤ 1
Hm: m ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Hlen: length [m] ≤ 1
Hm: m ∈ eval ρ base

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Hlen: length [m] ≤ 1
Hm: m ∈ eval ρ base

m ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
Hlen: length [m] ≤ 1
Hm: m ∈ eval ρ base

m ∈ eval ρ base
apply Hm.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen

witnessed_elements_old_of_max_len (S (S len)) ⊆ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen

witnessed_elements_old_of_max_len (S (S len)) ⊆ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M

m ∈ witnessed_elements_old_of_max_len (S (S len)) → m ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M

m ∈ witnessed_elements_old_of_max_len (S (S len)) → m ∈ F (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M

m ∈ witnessed_elements_old_of_max_len (S (S len)) → m ∈ F (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
H: m ∈ witnessed_elements_old_of_max_len (S (S len))

m ∈ F (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
l: list M
Hwit: is_witnessing_sequence_old m l
Hlen: length l ≤ S (S len)

m ∈ F (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
l: list M
Hwit: is_witnessing_sequence_old m l
Hlen: length l ≤ S (S len)

m ∈ F (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
l: list M
Hwit: is_witnessing_sequence_old m l
Hlen: length l ≤ S (S len)

m ∈ F (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
l: list M
Hwit: is_witnessing_sequence_old m l
Hlen: length l ≤ S (S len)

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
l: list M
Hwit: is_witnessing_sequence_old m l
Hlen: length l ≤ S (S len)
Hwit': is_witnessing_sequence_old m l

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
l: list M
Hwit: is_witnessing_sequence_old m l
Hlen: length l ≤ S (S len)
Hwit': is_witnessing_sequence_old m l

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
l: list M
Hlast: last l = Some m
Hl: match l with | [] => False | m₀ :: ms => m₀ ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (m₀ :: ms) ms) end
Hlen: length l ≤ S (S len)
Hwit': is_witnessing_sequence_old m l

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
Hlast: last [] = Some m
Hl: False
Hlen: length [] ≤ S (S len)
Hwit': is_witnessing_sequence_old m []

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
l: list M
Hlast: last (d :: l) = Some m
Hl: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l) l)
Hlen: length (d :: l) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: l)
m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
Hlast: last [] = Some m
Hl: False
Hlen: length [] ≤ S (S len)
Hwit': is_witnessing_sequence_old m []

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
contradiction.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
l: list M
Hlast: last (d :: l) = Some m
Hl: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l) l)
Hlen: length (d :: l) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: l)

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
l: list M
Hlast: last (d :: l) = Some m
Hl: d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l) l)
Hlen: S (length l) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: l)

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
l: list M
Hlast: last (d :: l) = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: l) l)
Hlen: S (length l) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: l)

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: last [d] = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Hlen: S (length []) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [d]

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0: M
l: list M
Hlast: last (d :: d0 :: l) = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: l) (d0 :: l))
Hlen: S (length (d0 :: l)) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: l)
m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: last [d] = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Hlen: S (length []) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [d]

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some d = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Hlen: S (length []) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [d]

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some d = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Hlen: S (length []) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [d]
H0: d = m

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Hlen: S (length []) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [d]
H0: d = m

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
Hd: m ∈ eval ρ base
Hlen: S (length []) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [m]

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
Hd: m ∈ eval ρ base
Hlen: S (length []) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [m]

m ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m: M
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
Hd: m ∈ eval ρ base
Hlen: S (length []) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [m]

m ∈ eval ρ base
apply Hd.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0: M
l: list M
Hlast: last (d :: d0 :: l) = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: l) (d0 :: l))
Hlen: S (length (d0 :: l)) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: l)

m ∈ eval ρ base ∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0: M
l: list M
Hlast: last (d :: d0 :: l) = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: l) (d0 :: l))
Hlen: S (length (d0 :: l)) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: l)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0: M
l: list M
Hlast: last (d :: d0 :: l) = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: l) (d0 :: l))
Hlen: S (length (d0 :: l)) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: l)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0: M
l: list M
Hlast: last (d :: d0 :: l) = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: l) (d0 :: l))
Hlen: S (length (d0 :: l)) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: l)
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0: M
Hlast: last [d; d0] = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d; d0] [d0])
Hlen: S (length [d0]) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [d; d0]
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (d :: d0 :: x' :: l') = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: x' :: l') (d0 :: x' :: l'))
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0: M
Hlast: last [d; d0] = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d; d0] [d0])
Hlen: S (length [d0]) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [d; d0]
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0: M
Hlast: Some d0 = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d; d0] [d0])
Hlen: S (length [d0]) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [d; d0]
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0: M
Hlast: Some d0 = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d; d0] [d0])
Hlen: S (length [d0]) ≤ S (S len)
Hwit': is_witnessing_sequence_old m [d; d0]
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
H0: d0 = m

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d; m] [m])
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d; m] [m])
P: is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d) ↔ last [d] = Some d ∧ is_witnessing_sequence_old m ([d] ++ [m])

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d; m] [m])
P: last [d] = Some d ∧ is_witnessing_sequence_old m ([d] ++ [m]) → is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d; m] [m])
P: Some d = Some d ∧ is_witnessing_sequence_old m [d; m] → is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(d, m)]
P: Some d = Some d ∧ is_witnessing_sequence_old m [d; m] → is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(d, m)]
P: Some d = Some d ∧ is_witnessing_sequence_old m [d; m] → is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d)
x: (M * M)%type
l: list (M * M)
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
H: x = (d, m)
H0: l = []

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) [(d, m)]
P: Some d = Some d ∧ is_witnessing_sequence_old m [d; m] → is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d)
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
P: Some d = Some d ∧ is_witnessing_sequence_old m [d; m] → is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d)
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
P: Some d = Some d ∧ is_witnessing_sequence_old m [d; m] → is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d)
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []

Some d = Some d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
P: Some d = Some d ∧ is_witnessing_sequence_old m [d; m] → is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d)
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
P: Some d = Some d ∧ is_witnessing_sequence_old m [d; m] → is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d)
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []

Some d = Some d
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
P: Some d = Some d ∧ is_witnessing_sequence_old m [d; m] → is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d)
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
P: is_witnessing_sequence_old d [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' d)
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step ∧ m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step ∧ m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

re : M, step' ∈ eval ρ step ∧ re ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' re
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step ∧ m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

step' ∈ eval ρ step ∧ d ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

step' ∈ eval ρ step ∧ d ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

step' ∈ eval ρ step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d
d ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

step' ∈ eval ρ step
apply Hstep'.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

d ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

d ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d
m ∈ app_interp step' d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

d ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

d ∈ witnessed_elements_old_of_max_len (S len)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

d ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

is_witnessing_sequence_old d [d] ∧ length [d] ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

is_witnessing_sequence_old d [d]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d
length [d] ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

length [d] ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

1 ≤ S len
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

is_witnessing_sequence_old d [d]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

is_witnessing_sequence_old d [d]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

is_witnessing_sequence_old d [d]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

last [d] = Some d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d
d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

last [d] = Some d
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

d ∈ eval ρ base ∧ Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

d ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d
Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

d ∈ eval ρ base
apply Hd.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

True
exact I.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d: M
Hlast: Some m = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; m]
Hlen: S (length [m]) ≤ S (S len)
Hwitd: is_witnessing_sequence_old d [d]
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' d
H1: m ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) []
Hsomed: Some d = Some d

m ∈ app_interp step' d
apply Hm.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (d :: d0 :: x' :: l') = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: x' :: l') (d0 :: x' :: l'))
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (d :: d0 :: x' :: l') = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: x' :: l') (d0 :: x' :: l'))
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) (zip (d :: d0 :: x' :: l') (d0 :: x' :: l'))
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, d0) :: (d0, x') :: match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end)
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, d0) :: (d0, x') :: match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end)
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
x: (M * M)%type
l: list (M * M)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d0, x') :: match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end)
H: x = (d, d0)
H0: l = (d0, x') :: match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hl: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d, d0) :: (d0, x') :: match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end)
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d0, x') :: match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d0, x') :: match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d0, x') :: match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end)
x: (M * M)%type
l: list (M * M)
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
H: x = (d0, x')
H0: l = match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H2: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) ((d0, x') :: match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end)
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= rev (d0 :: x' :: l') !! 1: option M

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Htot: rev (d0 :: x' :: l') !! 1 = Some (rev (d0 :: x' :: l') !!! 1)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Htot: rev (d0 :: x' :: l') !! 1 = Some (rev (d0 :: x' :: l') !!! 1)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Inhabited M
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev (d0 :: x' :: l'))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M

Inhabited M
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M

M
exact d0.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Htot: rev (d0 :: x' :: l') !! 1 = Some (rev (d0 :: x' :: l') !!! 1)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev (d0 :: x' :: l'))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M

1 < length (rev (d0 :: x' :: l'))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M

1 < length ((rev l' ++ [x']) ++ [d0])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M

1 < length (rev l' ++ [x']) + length [d0]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M

1 < length (rev l') + length [x'] + length [d0]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M

1 < length (rev l') + 1 + 1
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Htot: rev (d0 :: x' :: l') !! 1 = Some (rev (d0 :: x' :: l') !!! 1)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
IHlen: witnessed_elements_old_of_max_len (S len) ⊆ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
mprev: M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ witnessed_elements_old_of_max_len (S len) → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: (m x m' : M) (l : list M), is_witnessing_sequence_old m (x :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m' ∈ app_interp step' m) ↔ last (x :: l) = Some m ∧ is_witnessing_sequence_old m' (x :: l ++ [m'])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev

d :: d0 :: x' :: l' = d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev

d :: d0 :: x' :: l' = d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev

d0 :: x' :: l' = rev (tail (rev (d0 :: x' :: l'))) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev

d0 :: x' :: l' = rev (tail ((rev l' ++ [x']) ++ [d0])) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev

[x'] = rev [x']
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']
d0 :: x' :: l' = rev (tail ((rev l' ++ [x']) ++ [d0])) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev

[x'] = rev [x']
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']

d0 :: x' :: l' = rev (tail ((rev l' ++ [x']) ++ [d0])) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']

d0 :: x' :: l' = rev (tail ((rev l' ++ rev [x']) ++ [d0])) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']

d0 :: x' :: l' = rev (tail (rev ([x'] ++ l') ++ [d0])) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']

[d0] = rev [d0]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']
Hd0r: [d0] = rev [d0]
d0 :: x' :: l' = rev (tail (rev ([x'] ++ l') ++ [d0])) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']

[d0] = rev [d0]
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']
Hd0r: [d0] = rev [d0]

d0 :: x' :: l' = rev (tail (rev ([x'] ++ l') ++ [d0])) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']
Hd0r: [d0] = rev [d0]

d0 :: x' :: l' = rev (tail (rev ([x'] ++ l') ++ rev [d0])) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']
Hd0r: [d0] = rev [d0]

d0 :: x' :: l' = rev (tail (rev ([d0] ++ [x'] ++ l'))) ++ [m]
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']
Hd0r: [d0] = rev [d0]

last ([d0] ++ [x'] ++ l') = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']
Hd0r: [d0] = rev [d0]
d0 :: x' :: l' = [d0] ++ [x'] ++ l'
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']
Hd0r: [d0] = rev [d0]

last (x' :: l') = Some m
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']
Hd0r: [d0] = rev [d0]
d0 :: x' :: l' = [d0] ++ [x'] ++ l'
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Hx'r: [x'] = rev [x']
Hd0r: [d0] = rev [d0]

d0 :: x' :: l' = [d0] ++ [x'] ++ l'
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev) ↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: last (d :: rev (tail (rev (d0 :: x' :: l')))) = Some mprev ∧ is_witnessing_sequence_old m (d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) → is_witnessing_sequence_old mprev (d :: rev (tail (rev (d0 :: x' :: l')))) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
Heqrev: rev (tail (rev (d0 :: x' :: l'))) = []
P: last [d] = Some mprev ∧ is_witnessing_sequence_old m (d :: [] ++ [m]) → is_witnessing_sequence_old mprev [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
d1: M
l: list M
Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l
P: last (d :: d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: (d1 :: l) ++ [m]) → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: (d1 :: l) ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
Heqrev: rev (tail (rev (d0 :: x' :: l'))) = []
P: last [d] = Some mprev ∧ is_witnessing_sequence_old m (d :: [] ++ [m]) → is_witnessing_sequence_old mprev [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
Heqrev: length (rev (tail (rev (d0 :: x' :: l')))) = 0
P: last [d] = Some mprev ∧ is_witnessing_sequence_old m (d :: [] ++ [m]) → is_witnessing_sequence_old mprev [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: last [d] = Some mprev ∧ is_witnessing_sequence_old m (d :: [] ++ [m]) → is_witnessing_sequence_old mprev [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]
Heqrev: length (tail (rev (d0 :: x' :: l'))) = 0

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: last [d] = Some mprev ∧ is_witnessing_sequence_old m (d :: [] ++ [m]) → is_witnessing_sequence_old mprev [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]
Heqrev: length (rev (d0 :: x' :: l')) = 0 ∨ length (rev (d0 :: x' :: l')) = 1

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: last [d] = Some mprev ∧ is_witnessing_sequence_old m (d :: [] ++ [m]) → is_witnessing_sequence_old mprev [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]
Heqrev: length (d0 :: x' :: l') = 0 ∨ length (d0 :: x' :: l') = 1

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
P: last [d] = Some mprev ∧ is_witnessing_sequence_old m (d :: [] ++ [m]) → is_witnessing_sequence_old mprev [d] ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]
Heqrev: S (S (length l')) = 0 ∨ S (S (length l')) = 1

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
d1: M
l: list M
Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l
P: last (d :: d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: (d1 :: l) ++ [m]) → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: (d1 :: l) ++ [m]

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
d1: M
l: list M
Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l
P: last (d :: d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: (d1 :: l) ++ [m]) → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: d1 :: l ++ [m]

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
Hlen: S (length (d0 :: x' :: l')) ≤ S (S len)
Hwit': is_witnessing_sequence_old m (d :: d0 :: x' :: l')
d1: M
l: list M
Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l
P: last (d :: d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: (d1 :: l) ++ [m]) → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H1: d0 ∈ app_ext (eval ρ step) {[d]}
H3: x' ∈ app_ext (eval ρ step) {[d0]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1
Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Heq1: d :: d0 :: x' :: l' = d :: d1 :: l ++ [m]
H0: d0 = d1
H2: x' :: l' = l ++ [m]

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
P: last (d :: d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: (d1 :: l) ++ [m]) → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Heq1: d :: d1 :: x' :: l' = d :: d1 :: l ++ [m]
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
P: last (d :: d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: (d1 :: l) ++ [m]) → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
P: last (d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: d1 :: l ++ [m]) → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
P: last (d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: d1 :: x' :: l') → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
P: last (d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: d1 :: x' :: l') → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)

match l with | [] => Some d1 | _ :: _ => last l end = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
P: last (d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: d1 :: x' :: l') → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
Hm: match l with | [] => Some d1 | _ :: _ => last l end = Some mprev
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
P: last (d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: d1 :: x' :: l') → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)

match l with | [] => Some d1 | _ :: _ => last l end = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
H2: x' :: l' = l ++ [m]

match l with | [] => Some d1 | _ :: _ => last l end = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
H2: x' :: l' = [] ++ [m]

Some d1 = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
d0: M
l: list M
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
H2: x' :: l' = (d0 :: l) ++ [m]
last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
H2: x' :: l' = [] ++ [m]

Some d1 = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
H2: x' :: l' = [m]

Some d1 = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
H2: x' :: l' = [m]
H0: x' = m
H1: l' = []

Some d1 = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
d1, m: M
IHlen: rev [d1; m] !!! 1 ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → rev [d1; m] !!! 1eval ρ patt_ind_gen
d: M
Hlast: last [m] = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; d1; m]
Hlen: S (length [d1; m]) ≤ S (S len)
Htot: rev [d1; m] !! 1 = Some (rev [d1; m] !!! 1)
H2: [m] = [m]

Some d1 = Some (rev [d1; m] !!! 1)
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
d0: M
l: list M
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
H2: x' :: l' = (d0 :: l) ++ [m]

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
d0: M
l: list M
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
H2: x' :: l' = (d0 :: l) ++ [m]

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
d0: M
l: list M
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
H2: x' :: l' = d0 :: l ++ [m]

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
d0: M
l: list M
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
H2: x' :: l' = d0 :: l ++ [m]
H0: x' = d0
H1: l' = l ++ [m]

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1: M
Htot: rev (d1 :: d0 :: l ++ [m]) !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: d0 :: l ++ [m]) !!! 1
H2: d0 :: l ++ [m] = d0 :: l ++ [m]
Hlast: last (d0 :: l ++ [m]) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: l ++ [m])
Hlen: S (length (d1 :: d0 :: l ++ [m])) ≤ S (S len)

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1: M
Htot: rev (d1 :: d0 :: l ++ [m]) !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: d0 :: l ++ [m]) !!! 1
Hlast: last (d0 :: l ++ [m]) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: l ++ [m])
Hlen: S (length (d1 :: d0 :: l ++ [m])) ≤ S (S len)

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1: M
Htot: ((rev (l ++ [m]) ++ [d0]) ++ [d1]) !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: d0 :: l ++ [m]) !!! 1
Hlast: last (d0 :: l ++ [m]) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: l ++ [m])
Hlen: S (length (d1 :: d0 :: l ++ [m])) ≤ S (S len)

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1: M
Hcontra: l ++ [m] = []
Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev
Heqmprev: mprev = rev [d1; d0] !!! 1
Hlast: last [d0] = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; d1; d0]
Hlen: S (length [d1; d0]) ≤ S (S len)

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1, d2: M
l0: list M
Hcontra: l ++ [m] = d2 :: l0
Htot: ((rev (d2 :: l0) ++ [d0]) ++ [d1]) !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1: M
Hcontra: l ++ [m] = []
Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev
Heqmprev: mprev = rev [d1; d0] !!! 1
Hlast: last [d0] = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; d1; d0]
Hlen: S (length [d1; d0]) ≤ S (S len)

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1: M
Hcontra: l ++ [m] = []
Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev
Heqmprev: mprev = rev [d1; d0] !!! 1
Hlast: last [d0] = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; d1; d0]
Hlen: S (length [d1; d0]) ≤ S (S len)
Hcontra': length (l ++ [m]) = length l + length [m]

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1: M
Hcontra: l ++ [m] = []
Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev
Heqmprev: mprev = rev [d1; d0] !!! 1
Hlast: last [d0] = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; d1; d0]
Hlen: S (length [d1; d0]) ≤ S (S len)
Hcontra': length [] = length l + length [m]

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1: M
Hcontra: l ++ [m] = []
Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev
Heqmprev: mprev = rev [d1; d0] !!! 1
Hlast: last [d0] = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m [d; d1; d0]
Hlen: S (length [d1; d0]) ≤ S (S len)
Hcontra': 0 = length l + 1

last (d0 :: l) = Some mprev
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1, d2: M
l0: list M
Hcontra: l ++ [m] = d2 :: l0
Htot: ((rev (d2 :: l0) ++ [d0]) ++ [d1]) !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1, d2: M
l0: list M
Hcontra: l ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: ((rev (l ++ [m]) ++ [d0]) ++ [d1]) !! 1 = Some mprev

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1, d2: M
l0: list M
Hcontra: l ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: (((rev [m] ++ rev l) ++ [d0]) ++ [d1]) !! 1 = Some mprev

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0: M
l: list M
d1, d2: M
l0: list M
Hcontra: l ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: ((rev l ++ [d0]) ++ [d1]) !! 0 = Some mprev

last (d0 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, d1, d2: M
l0: list M
Hcontra: [] ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: ((rev [] ++ [d0]) ++ [d1]) !! 0 = Some mprev

last [d0] = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, d3: M
l: list M
d1, d2: M
l0: list M
Hcontra: (d3 :: l) ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: ((rev (d3 :: l) ++ [d0]) ++ [d1]) !! 0 = Some mprev
last (d0 :: d3 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, d1, d2: M
l0: list M
Hcontra: [] ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: ((rev [] ++ [d0]) ++ [d1]) !! 0 = Some mprev

last [d0] = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, d1, d2: M
l0: list M
Hcontra: [] ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: Some d0 = Some mprev

last [d0] = Some mprev
apply Htot.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, d3: M
l: list M
d1, d2: M
l0: list M
Hcontra: (d3 :: l) ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: ((rev (d3 :: l) ++ [d0]) ++ [d1]) !! 0 = Some mprev

last (d0 :: d3 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, d3: M
l: list M
d1, d2: M
l0: list M
Hcontra: (d3 :: l) ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 = Some mprev

last (d0 :: d3 :: l) = Some mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, d3: M
l: list M
d1, d2: M
l0: list M
Hcontra: (d3 :: l) ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 = Some mprev

last (d0 :: d3 :: l) = (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, d3: M
l: list M
d1, d2: M
l0: list M
Hcontra: (d3 :: l) ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 = Some mprev

last (d0 :: d3 :: l) = head (((rev l ++ [d3]) ++ [d0]) ++ [d1])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, d3: M
l: list M
d1, d2: M
l0: list M
Hcontra: (d3 :: l) ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 = Some mprev

last (d0 :: d3 :: l) = head ((rev l ++ [d3]) ++ [d0])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, d3: M
l: list M
d1, d2: M
l0: list M
Hcontra: (d3 :: l) ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 = Some mprev

last (d0 :: d3 :: l) = head (rev l ++ [d3])
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, d0, d3: M
l: list M
d1, d2: M
l0: list M
Hcontra: (d3 :: l) ++ [m] = d2 :: l0
Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1
Hlast: last (d0 :: d2 :: l0) = Some m
Hd: d ∈ eval ρ base
Hwit': is_witnessing_sequence_old m (d :: d1 :: d0 :: d2 :: l0)
Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 = Some mprev

last (d3 :: l) = head (rev l ++ [d3])
apply last_rev_head.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
P: last (d1 :: l) = Some mprev ∧ is_witnessing_sequence_old m (d :: d1 :: x' :: l') → is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
Hm: match l with | [] => Some d1 | _ :: _ => last l end = Some mprev

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hwit': is_witnessing_sequence_old m (d :: d1 :: x' :: l')
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
P: is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)
Hm: match l with | [] => Some d1 | _ :: _ => last l end = Some mprev

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
P: is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ ( step' : M, step' ∈ eval ρ step ∧ m ∈ app_interp step' mprev)

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

re : M, step' ∈ eval ρ step ∧ re ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' re
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

step' ∈ eval ρ step ∧ mprev ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

step' ∈ eval ρ step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev
mprev ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

step' ∈ eval ρ step
apply Hstep'.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

mprev ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

mprev ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev
m ∈ app_interp step' mprev
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

m ∈ app_interp step' mprev
apply Hm.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

mprev ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

is_witnessing_sequence_old mprev (d :: d1 :: l) ∧ length (d :: d1 :: l) ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

is_witnessing_sequence_old mprev (d :: d1 :: l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev
length (d :: d1 :: l) ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

is_witnessing_sequence_old mprev (d :: d1 :: l)
apply Hwitmprev.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

length (d :: d1 :: l) ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (length (d1 :: x' :: l')) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

S (S (length l)) ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (S (S (length l'))) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

S (S (length l)) ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (S (S (length l'))) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

S (length l') ≤ len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (S (S (length l'))) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev
Hlen': S (length l') ≤ len
S (S (length l)) ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (S (S (length l'))) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev

S (length l') ≤ len
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (S (S (length l'))) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev
Hlen': S (length l') ≤ len

S (S (length l)) ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (S (S (length l'))) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev
Hlen': S (length l') ≤ len

length l' = length l
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (S (S (length l'))) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev
Hlen': S (length l') ≤ len
H: length l' = length l
S (S (length l)) ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (S (S (length l'))) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev
Hlen': S (length l') ≤ len

length l' = length l
apply (@list_len_slice _ _ _ _ _ H2).
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (S (S (length l'))) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev
Hlen': S (length l') ≤ len
H: length l' = length l

S (S (length l)) ≤ S len
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
len: nat
mprev: M
IHlen: mprev ∈ {[ m | l : list M, is_witnessing_sequence_old m l ∧ length l ≤ S len ]} → mprev ∈ eval ρ patt_ind_gen
m, d, x': M
l': list M
Hlast: last (x' :: l') = Some m
Hd: d ∈ eval ρ base
d1: M
Hlen: S (S (S (length l'))) ≤ S (S len)
l: list M
Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l
H3: x' ∈ app_ext (eval ρ step) {[d1]}
H1: d1 ∈ app_ext (eval ρ step) {[d]}
H4: Forall (λ x : M * M, let (old, new) := x in new ∈ app_ext (eval ρ step) {[old]}) match l' with | [] => [] | x2 :: l2 => (x', x2) :: zip l' l2 end
Htot: rev (d1 :: x' :: l') !! 1 = Some mprev
Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1
mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M
H2: x' :: l' = l ++ [m]
Hwitmprev: is_witnessing_sequence_old mprev (d :: d1 :: l)
step': M
Hstep': step' ∈ eval ρ step
Hm: m ∈ app_interp step' mprev
Hlen': S (length l') ≤ len
H: length l' = length l

S (S (length l')) ≤ S len
lia. Qed.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

witnessed_elements_old ⊆ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

witnessed_elements_old ⊆ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ witnessed_elements_old

x ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ witnessed_elements_old

x ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
H: x ∈ {[ m | l : list M, is_witnessing_sequence_old m l ]}

x ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hwit: is_witnessing_sequence_old x wit

x ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hwit: is_witnessing_sequence_old x wit

x ∈ witnessed_elements_old_of_max_len (length wit)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hwit: is_witnessing_sequence_old x wit
H': x ∈ witnessed_elements_old_of_max_len (length wit)
x ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hwit: is_witnessing_sequence_old x wit

x ∈ witnessed_elements_old_of_max_len (length wit)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hwit: is_witnessing_sequence_old x wit

x ∈ witnessed_elements_old_of_max_len (length wit)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hwit: is_witnessing_sequence_old x wit

is_witnessing_sequence_old x wit ∧ length wit ≤ length wit
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hwit: is_witnessing_sequence_old x wit

is_witnessing_sequence_old x wit
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hwit: is_witnessing_sequence_old x wit
length wit ≤ length wit
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hwit: is_witnessing_sequence_old x wit

length wit ≤ length wit
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hwit: is_witnessing_sequence_old x wit
H': x ∈ witnessed_elements_old_of_max_len (length wit)

x ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hl: wit = []
Hwit: is_witnessing_sequence_old x []
H': x ∈ witnessed_elements_old_of_max_len (length [])

x ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
y: M
l': list M
Hl: wit = y :: l'
Hwit: is_witnessing_sequence_old x (y :: l')
H': x ∈ witnessed_elements_old_of_max_len (length (y :: l'))
x ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hl: wit = []
Hwit: is_witnessing_sequence_old x []
H': x ∈ witnessed_elements_old_of_max_len (length [])

x ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hl: wit = []
Hwit: is_witnessing_sequence_old x []
H': x ∈ witnessed_elements_old_of_max_len (length [])

x ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
Hl: wit = []
H: last [] = Some x
H0: False
H': x ∈ witnessed_elements_old_of_max_len (length [])

x ∈ eval ρ patt_ind_gen
contradiction.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
y: M
l': list M
Hl: wit = y :: l'
Hwit: is_witnessing_sequence_old x (y :: l')
H': x ∈ witnessed_elements_old_of_max_len (length (y :: l'))

x ∈ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
y: M
l': list M
Hl: wit = y :: l'
Hwit: is_witnessing_sequence_old x (y :: l')
H': x ∈ witnessed_elements_old_of_max_len (length (y :: l'))

x ∈ witnessed_elements_old_of_max_len (S ?len)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
x: M
wit: list M
y: M
l': list M
Hl: wit = y :: l'
Hwit: is_witnessing_sequence_old x (y :: l')
H': x ∈ witnessed_elements_old_of_max_len (S (length l'))

x ∈ witnessed_elements_old_of_max_len (S ?len)
apply H'. Qed. Definition witnessed_elements : propset (Domain M) := PropSet (λ m, l, is_witnessing_sequence m l).
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

witnessed_elements_old = witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

witnessed_elements_old = witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

witnessed_elements_old ⊆ witnessed_elements ⊆ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

( x : M, x ∈ witnessed_elements_old → x ∈ witnessed_elements) ∧ ( x : M, x ∈ witnessed_elements → x ∈ witnessed_elements_old)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
H: is_witnessing_sequence_old m l

m ∈ {[ m | l : list M, is_witnessing_sequence m l ]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
H: is_witnessing_sequence m l
m ∈ {[ m | l : list M, is_witnessing_sequence_old m l ]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
H: is_witnessing_sequence_old m l

m ∈ {[ m | l : list M, is_witnessing_sequence m l ]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
H: is_witnessing_sequence_old m l

is_witnessing_sequence m (reverse l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
H: is_witnessing_sequence_old m l

is_witnessing_sequence_old m (reverse (reverse l))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
H: is_witnessing_sequence_old m l

is_witnessing_sequence_old m l
exact H.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
H: is_witnessing_sequence m l

m ∈ {[ m | l : list M, is_witnessing_sequence_old m l ]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
H: is_witnessing_sequence m l

is_witnessing_sequence_old m (reverse l)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
m: M
l: list M
H: is_witnessing_sequence m l

is_witnessing_sequence m l
apply H. Qed.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

eval ρ patt_ind_gen = witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

eval ρ patt_ind_gen = witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

eval ρ patt_ind_gen = witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

eval ρ patt_ind_gen ⊆ witnessed_elements_old ⊆ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

eval ρ patt_ind_gen ⊆ witnessed_elements_old
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
witnessed_elements_old ⊆ eval ρ patt_ind_gen
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

eval ρ patt_ind_gen ⊆ witnessed_elements_old
apply interp_included_in_witnessed_elements_old.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M

witnessed_elements_old ⊆ eval ρ patt_ind_gen
apply witnessed_elements_old_included_in_interp. Qed. Section injective. Hypothesis (Domain_eq_dec : EqDecision (Domain M)). Hypothesis (Hstep_total_function : @is_total_function _ M step witnessed_elements witnessed_elements ρ). Hypothesis (Hstep_injective : @total_function_is_injective _ M step witnessed_elements ρ). Hypothesis (Hbase_step_no_confusion : (eval ρ base) ∩ (app_ext (eval ρ step) witnessed_elements) = ∅).
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅

(m : M) (l₁ l₂ : list M), is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅

(m : M) (l₁ l₂ : list M), is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M

is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M

( l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂) → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M

( l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂) → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂

l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
l: length l₁ ≤ length l₂

l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
n: ¬ length l₁ ≤ length l₂
l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
l: length l₁ ≤ length l₂

l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
l: length l₁ ≤ length l₂

l₂ = l₁
apply H; auto.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
n: ¬ length l₁ ≤ length l₂

l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
n: ¬ length l₁ ≤ length l₂

length l₂ ≤ length l₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
n: ¬ length l₁ ≤ length l₂
is_witnessing_sequence m l₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
n: ¬ length l₁ ≤ length l₂
is_witnessing_sequence m l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
n: ¬ length l₁ ≤ length l₂

is_witnessing_sequence m l₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
n: ¬ length l₁ ≤ length l₂
is_witnessing_sequence m l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
H: l₁ l₂ : list M, length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
n: ¬ length l₁ ≤ length l₂

is_witnessing_sequence m l₂
auto.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M

length l₂ ≤ length l₁ → is_witnessing_sequence m l₁ → is_witnessing_sequence m l₂ → l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂

l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂

m ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂

m ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂

is_witnessing_sequence m l₁
apply Hw₁.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements

l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
lst₁: M
Hlst₁: last l₁ = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hhd₁: head l₁ = Some m
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l₁ (tail l₁))
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₂: list M
Hlen12: length l₂ ≤ length []
lst₁: M
Hlst₁: last [] = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hhd₁: head [] = Some m
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements

common_length [] l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m, m₁: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length (m₁ :: l₁)
lst₁: M
Hlst₁: last (m₁ :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hhd₁: head (m₁ :: l₁) = Some m
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m₁ :: l₁) (tail (m₁ :: l₁)))
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
common_length (m₁ :: l₁) l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₂: list M
Hlen12: length l₂ ≤ length []
lst₁: M
Hlst₁: last [] = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hhd₁: head [] = Some m
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements

common_length [] l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₂: list M
Hlen12: length l₂ ≤ length []
lst₁: M
Hlst₁: None = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hhd₁: head [] = Some m
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements

common_length [] l₂ = length l₂
inversion Hlst₁.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m, m₁: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length (m₁ :: l₁)
lst₁: M
Hlst₁: last (m₁ :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hhd₁: head (m₁ :: l₁) = Some m
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m₁ :: l₁) (tail (m₁ :: l₁)))
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements

common_length (m₁ :: l₁) l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m, m₁: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length (m₁ :: l₁)
lst₁: M
Hlst₁: last (m₁ :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hhd₁: Some m₁ = Some m
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m₁ :: l₁) (tail (m₁ :: l₁)))
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements

common_length (m₁ :: l₁) l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m, m₁: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length (m₁ :: l₁)
lst₁: M
Hlst₁: last (m₁ :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hhd₁: Some m₁ = Some m
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m₁ :: l₁) (tail (m₁ :: l₁)))
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
H0: m₁ = m

common_length (m :: l₁) l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
Hhd₁: Some m = Some m
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements

common_length (m :: l₁) l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements

common_length (m :: l₁) l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last l₂ = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hhd₂: head l₂ = Some m
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l₂ (tail l₂))
Hmwit: m ∈ witnessed_elements

common_length (m :: l₁) l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
Hlen12: length [] ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last [] = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hhd₂: head [] = Some m
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
Hmwit: m ∈ witnessed_elements

common_length (m :: l₁) [] = length []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
m₂: M
l₂: list M
Hlen12: length (m₂ :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m₂ :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hhd₂: head (m₂ :: l₂) = Some m
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m₂ :: l₂) (tail (m₂ :: l₂)))
Hmwit: m ∈ witnessed_elements
common_length (m :: l₁) (m₂ :: l₂) = length (m₂ :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
Hlen12: length [] ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last [] = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hhd₂: head [] = Some m
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
Hmwit: m ∈ witnessed_elements

common_length (m :: l₁) [] = length []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
Hlen12: length [] ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: None = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hhd₂: head [] = Some m
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
Hmwit: m ∈ witnessed_elements

common_length (m :: l₁) [] = length []
inversion Hlst₂.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
m₂: M
l₂: list M
Hlen12: length (m₂ :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m₂ :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hhd₂: head (m₂ :: l₂) = Some m
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m₂ :: l₂) (tail (m₂ :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length (m :: l₁) (m₂ :: l₂) = length (m₂ :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
m₂: M
l₂: list M
Hlen12: length (m₂ :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m₂ :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hhd₂: Some m₂ = Some m
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m₂ :: l₂) (tail (m₂ :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length (m :: l₁) (m₂ :: l₂) = length (m₂ :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
m₂: M
l₂: list M
Hlen12: length (m₂ :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m₂ :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hhd₂: Some m₂ = Some m
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m₂ :: l₂) (tail (m₂ :: l₂)))
Hmwit: m ∈ witnessed_elements
H0: m₂ = m

common_length (m :: l₁) (m :: l₂) = length (m :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length (m :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hhd₂: Some m = Some m
Hmwit: m ∈ witnessed_elements

common_length (m :: l₁) (m :: l₂) = length (m :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length (m :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length (m :: l₁) (m :: l₂) = length (m :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length (m :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

(if decide (m = m) then S (common_length l₁ l₂) else 0) = S (length l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length (m :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
e: m = m

S (common_length l₁ l₂) = S (length l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length (m :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
n: m ≠ m
0 = S (length l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length (m :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
n: m ≠ m

0 = S (length l₂)
contradiction.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length (m :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
e: m = m

S (common_length l₁ l₂) = S (length l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length (m :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

S (common_length l₁ l₂) = S (length l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length (m :: l₂) ≤ length (m :: l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: S (length l₂) ≤ S (length l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12': S (length l₂) ≤ S (length l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12': S (length l₂) ≤ S (length l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

length l₂ ≤ length l₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12': S (length l₂) ≤ S (length l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
Hlen12: length l₂ ≤ length l₁
common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12': S (length l₂) ≤ S (length l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

length l₂ ≤ length l₁
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12': S (length l₂) ≤ S (length l₁)
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
Hlen12: length l₂ ≤ length l₁

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
Hlen12: length l₂ ≤ length l₁

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
len₁: nat
Heqlen₁: len₁ = length l₁
Hlen12: length l₂ ≤ len₁

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
len₁: nat
Heqlen₁: len₁ = length l₁
Hlen12: length l₂ ≤ length l₁

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
len₁: nat
Heqlen₁: len₁ = length l₁
Hlen12: length l₂ ≤ length l₁

length l₁ ≤ len₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
len₁: nat
Heqlen₁: len₁ = length l₁
Hlen12: length l₂ ≤ length l₁
Hlen₁: length l₁ ≤ len₁
common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
len₁: nat
Heqlen₁: len₁ = length l₁
Hlen12: length l₂ ≤ length l₁

length l₁ ≤ len₁
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
len₁: nat
Heqlen₁: len₁ = length l₁
Hlen12: length l₂ ≤ length l₁
Hlen₁: length l₁ ≤ len₁

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
lst₁: M
Hlst₁: last (m :: l₁) = Some lst₁
Hbase₁: lst₁ ∈ eval ρ base
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
lst₂: M
Hlst₂: last (m :: l₂) = Some lst₂
Hbase₂: lst₂ ∈ eval ρ base
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
len₁: nat
Hlen12: length l₂ ≤ length l₁
Hlen₁: length l₁ ≤ len₁

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat

(m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hlen₁: length l₁ ≤ 0
Hlst₁: last (m :: l₁) = Some lst₁
Hlst₂: last (m :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hlen₁: length l₁ ≤ S len₁
Hlst₁: last (m :: l₁) = Some lst₁
Hlst₂: last (m :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hlen₁: length l₁ ≤ 0
Hlst₁: last (m :: l₁) = Some lst₁
Hlst₂: last (m :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m: M
l₂: list M
Hlen12: length l₂ ≤ length []
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length [] l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m, d: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length (d :: l₁)
Hlen₁: length (d :: l₁) ≤ 0
Hlst₁: last (m :: d :: l₁) = Some lst₁
Hlst₂: last (m :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l₁) (tail (m :: d :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements
common_length (d :: l₁) l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m, d: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length (d :: l₁)
Hlen₁: length (d :: l₁) ≤ 0
Hlst₁: last (m :: d :: l₁) = Some lst₁
Hlst₂: last (m :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l₁) (tail (m :: d :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length (d :: l₁) l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m, d: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length (d :: l₁)
Hlen₁: S (length l₁) ≤ 0
Hlst₁: last (m :: d :: l₁) = Some lst₁
Hlst₂: last (m :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l₁) (tail (m :: d :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length (d :: l₁) l₂ = length l₂
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m: M
l₂: list M
Hlen12: length l₂ ≤ length []
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length [] l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m: M
Hlen12: length [] ≤ length []
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last [m] = Some lst₂
Hfa₁, Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hmwit: m ∈ witnessed_elements

common_length [] [] = length []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m, d: M
l₂: list M
Hlen12: length (d :: l₂) ≤ length []
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: d :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l₂) (tail (m :: d :: l₂)))
Hmwit: m ∈ witnessed_elements
common_length [] (d :: l₂) = length (d :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m: M
Hlen12: length [] ≤ length []
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last [m] = Some lst₂
Hfa₁, Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hmwit: m ∈ witnessed_elements

common_length [] [] = length []
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m, d: M
l₂: list M
Hlen12: length (d :: l₂) ≤ length []
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: d :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l₂) (tail (m :: d :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length [] (d :: l₂) = length (d :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m, d: M
l₂: list M
Hlen12: length (d :: l₂) ≤ length []
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: d :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l₂) (tail (m :: d :: l₂)))
Hmwit: m ∈ witnessed_elements

length (d :: l₂) = 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m, d: M
l₂: list M
Hlen12: length (d :: l₂) ≤ length []
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: d :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l₂) (tail (m :: d :: l₂)))
Hmwit: m ∈ witnessed_elements
H: length (d :: l₂) = 0
common_length [] (d :: l₂) = length (d :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m, d: M
l₂: list M
Hlen12: length (d :: l₂) ≤ length []
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: d :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l₂) (tail (m :: d :: l₂)))
Hmwit: m ∈ witnessed_elements

length (d :: l₂) = 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m, d: M
l₂: list M
Hlen12: S (length l₂) ≤ 0
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: d :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l₂) (tail (m :: d :: l₂)))
Hmwit: m ∈ witnessed_elements

length (d :: l₂) = 0
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m, d: M
l₂: list M
Hlen12: length (d :: l₂) ≤ length []
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: d :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l₂) (tail (m :: d :: l₂)))
Hmwit: m ∈ witnessed_elements
H: length (d :: l₂) = 0

common_length [] (d :: l₂) = length (d :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
m, d: M
l₂: list M
Hlen12: length (d :: l₂) ≤ length []
Hlen₁: length [] ≤ 0
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: d :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: d :: l₂) (tail (m :: d :: l₂)))
Hmwit: m ∈ witnessed_elements
H: length (d :: l₂) = 0

common_length [] (d :: l₂) = 0
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hlen₁: length l₁ ≤ S len₁
Hlst₁: last (m :: l₁) = Some lst₁
Hlst₂: last (m :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length l₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
Hlen12: length [] ≤ length l₁
Hlen₁: length l₁ ≤ S len₁
Hlst₁: last (m :: l₁) = Some lst₁
Hlst₂: last [m] = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hmwit: m ∈ witnessed_elements

common_length l₁ [] = length []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
b: M
l₂: list M
Hlen12: length (b :: l₂) ≤ length l₁
Hlen₁: length l₁ ≤ S len₁
Hlst₁: last (m :: l₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements
common_length l₁ (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
Hlen12: length [] ≤ length l₁
Hlen₁: length l₁ ≤ S len₁
Hlst₁: last (m :: l₁) = Some lst₁
Hlst₂: last [m] = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hmwit: m ∈ witnessed_elements

common_length l₁ [] = length []
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
Hlen12: length [] ≤ length l₁
Hlen₁: length l₁ ≤ S len₁
Hlst₁: last (m :: l₁) = Some lst₁
Hlst₂: last [m] = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hmwit: m ∈ witnessed_elements

0 = length []
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
b: M
l₂: list M
Hlen12: length (b :: l₂) ≤ length l₁
Hlen₁: length l₁ ≤ S len₁
Hlst₁: last (m :: l₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length l₁ (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
b: M
l₂: list M
Heq: l₁ = []
Hlen12: length (b :: l₂) ≤ length []
Hlen₁: length [] ≤ S len₁
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length [] (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
b: M
l₂: list M
a: M
l'₁: list M
Heq: l₁ = a :: l'₁
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: a :: l'₁) (tail (m :: a :: l'₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements
common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
b: M
l₂: list M
Heq: l₁ = []
Hlen12: length (b :: l₂) ≤ length []
Hlen₁: length [] ≤ S len₁
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length [] (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
b: M
l₂: list M
Heq: l₁ = []
Hlen12: S (length l₂) ≤ 0
Hlen₁: length [] ≤ S len₁
Hlst₁: last [m] = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [m] (tail [m]))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length [] (b :: l₂) = length (b :: l₂)
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
b: M
l₂: list M
a: M
l'₁: list M
Heq: l₁ = a :: l'₁
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: a :: l'₁) (tail (m :: a :: l'₁)))
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
b: M
l₂: list M
a: M
l'₁: list M
Heq: l₁ = a :: l'₁
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, a) :: match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m: M
l₁: list M
b: M
l₂: list M
a: M
l'₁: list M
Heq: l₁ = a :: l'₁
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, a) :: match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements
x: (M * M)%type
l: list (M * M)
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
H: x = (m, a)
H0: l = match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, a) :: match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: b :: l₂) (tail (m :: b :: l₂)))
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, b) :: match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end)
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, b) :: match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end)
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
x: (M * M)%type
l: list (M * M)
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
H: x = (m, b)
H0: l = match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((m, b) :: match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end)
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

a ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

a ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

is_witnessing_sequence a (a :: l'₁)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

lst : M, last (a :: l'₁) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
head (a :: l'₁) = Some a ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (a :: l'₁) (tail (a :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

lst : M, last (a :: l'₁) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

last (a :: l'₁) = Some lst₁ ∧ lst₁ ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

last (a :: l'₁) = Some lst₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
lst₁ ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

last (a :: l'₁) = Some lst₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

last (a :: l'₁) = Some lst₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

last (a :: l'₁) = Some lst₁
apply Hlst₁.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

lst₁ ∈ eval ρ base
apply Hbase₁.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

head (a :: l'₁) = Some a ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (a :: l'₁) (tail (a :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

head (a :: l'₁) = Some a
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (a :: l'₁) (tail (a :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

head (a :: l'₁) = Some a
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (a :: l'₁) (tail (a :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
apply Hfa₁.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

is_witnessing_sequence b (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

lst : M, last (b :: l₂) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
head (b :: l₂) = Some b ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

lst : M, last (b :: l₂) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

last (b :: l₂) = Some lst₂ ∧ lst₂ ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

last (b :: l₂) = Some lst₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
lst₂ ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

last (b :: l₂) = Some lst₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

last (b :: l₂) = Some lst₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

last (b :: l₂) = Some lst₂
apply Hlst₂.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

lst₂ ∈ eval ρ base
apply Hbase₂.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

head (b :: l₂) = Some b ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

head (b :: l₂) = Some b
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

head (b :: l₂) = Some b
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
apply Hfa₂.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, a)
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (m, b)
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements

app_ext (eval ρ step) {[a]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements

app_ext (eval ρ step) {[a]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements

app_ext (eval ρ step) {[a]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
H: m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[a]} = {[m₂]}

app_ext (eval ρ step) {[a]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
a': M
Ha': app_ext (eval ρ step) {[a]} = {[a']}

app_ext (eval ρ step) {[a]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
a': M
Ha': app_ext (eval ρ step) {[a]} = {[a']}
Hma: m ∈ {[a']}

app_ext (eval ρ step) {[a]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
a': M
Ha': app_ext (eval ρ step) {[a]} = {[a']}
Hma: m ∈ {[a']}
H: a' = m

app_ext (eval ρ step) {[a]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Hma: m ∈ {[m]}
Ha': app_ext (eval ρ step) {[a]} = {[m]}

app_ext (eval ρ step) {[a]} = {[m]}
apply Ha'.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}

app_ext (eval ρ step) {[b]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}
common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}

app_ext (eval ρ step) {[b]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}

app_ext (eval ρ step) {[b]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
H: m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[b]} = {[m₂]}

app_ext (eval ρ step) {[b]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
b': M
Hb': app_ext (eval ρ step) {[b]} = {[b']}

app_ext (eval ρ step) {[b]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
b': M
Hb': app_ext (eval ρ step) {[b]} = {[b']}
Hmb: m ∈ {[b']}

app_ext (eval ρ step) {[b]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
b': M
Hb': app_ext (eval ρ step) {[b]} = {[b']}
Hmb: m ∈ {[b']}
H: b' = m

app_ext (eval ρ step) {[b]} = {[m]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: m₁ : M, m₁ ∈ witnessed_elements → m₂ : M, m₂ ∈ witnessed_elements ∧ app_ext (eval ρ step) {[m₁]} = {[m₂]}
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hmb: m ∈ {[m]}
Hb': app_ext (eval ρ step) {[b]} = {[m]}

app_ext (eval ρ step) {[b]} = {[m]}
apply Hb'.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}

a = b
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}
Haeqb: a = b
common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}

a = b
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}

a ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}
rel_of ρ step a = rel_of ρ step b
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}

b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}
rel_of ρ step a = rel_of ρ step b
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}

rel_of ρ step a = rel_of ρ step b
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}

app_ext (eval ρ step) {[a]} = app_ext (eval ρ step) {[b]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}

{[m]} = app_ext (eval ρ step) {[b]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}

{[m]} = {[m]}
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂: list M
a: M
l'₁: list M
Hlen12: length (b :: l₂) ≤ length (a :: l'₁)
Hlen₁: length (a :: l'₁) ≤ S len₁
Hlst₁: last (m :: a :: l'₁) = Some lst₁
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hma: m ∈ app_ext (eval ρ step) {[a]}
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (a, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita: a ∈ witnessed_elements
Hwitb: b ∈ witnessed_elements
Ham: app_ext (eval ρ step) {[a]} = {[m]}
Hbm: app_ext (eval ρ step) {[b]} = {[m]}
Haeqb: a = b

common_length (a :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hma, Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwita, Hwitb: b ∈ witnessed_elements
Ham, Hbm: app_ext (eval ρ step) {[b]} = {[m]}

common_length (b :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements

common_length (b :: l'₁) (b :: l₂) = length (b :: l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements

(if decide (b = b) then S (common_length l'₁ l₂) else 0) = S (length l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

S (common_length l'₁ l₂) = S (length l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
n: b ≠ b
0 = S (length l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
n: b ≠ b

0 = S (length l₂)
contradiction.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

S (common_length l'₁ l₂) = S (length l₂)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

common_length l'₁ l₂ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

length l₂ ≤ length l'₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
length l'₁ ≤ len₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
last (b :: l'₁) = Some lst₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
last (b :: l₂) = Some lst₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l'₁) (tail (b :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

length l₂ ≤ length l'₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: S (length l₂) ≤ S (length l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

length l₂ ≤ length l'₁
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

length l'₁ ≤ len₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
last (b :: l'₁) = Some lst₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
last (b :: l₂) = Some lst₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l'₁) (tail (b :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

length l'₁ ≤ len₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: S (length l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

length l'₁ ≤ len₁
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

last (b :: l'₁) = Some lst₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
last (b :: l₂) = Some lst₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l'₁) (tail (b :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

last (b :: l'₁) = Some lst₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
last (b :: l₂) = Some lst₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l'₁) (tail (b :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

last (b :: l'₁) = Some lst₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
last (b :: l₂) = Some lst₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l'₁) (tail (b :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

last (b :: l₂) = Some lst₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l'₁) (tail (b :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

last (b :: l₂) = Some lst₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l'₁) (tail (b :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

last (b :: l₂) = Some lst₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l'₁) (tail (b :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l'₁) (tail (b :: l'₁)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (b :: l₂) (tail (b :: l₂)))
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b
b ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
lst₁: M
Hbase₁: lst₁ ∈ eval ρ base
lst₂: M
Hbase₂: lst₂ ∈ eval ρ base
len₁: nat
IHlen₁: (m : M) (l₁ l₂ : list M), length l₂ ≤ length l₁ → length l₁ ≤ len₁ → last (m :: l₁) = Some lst₁ → last (m :: l₂) = Some lst₂ → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₁) (tail (m :: l₁))) → Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (m :: l₂) (tail (m :: l₂))) → m ∈ witnessed_elements → common_length l₁ l₂ = length l₂
m, b: M
l₂, l'₁: list M
Hlst₁: last (m :: b :: l'₁) = Some lst₁
Hlen₁: length (b :: l'₁) ≤ S len₁
Hlen12: length (b :: l₂) ≤ length (b :: l'₁)
Hlst₂: last (m :: b :: l₂) = Some lst₂
Hmwit: m ∈ witnessed_elements
Hfa₁: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l'₁ with | [] => [] | x2 :: l2 => (b, x2) :: zip l'₁ l2 end
Hmb: m ∈ app_ext (eval ρ step) {[b]}
Hfa₂: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l₂ with | [] => [] | x2 :: l2 => (b, x2) :: zip l₂ l2 end
Hwitb: b ∈ witnessed_elements
e: b = b

b ∈ witnessed_elements
apply Hwitb.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂

l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂

l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂

l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂

length l₂ - 1 < common_length l₁ l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂

length l₂ - 1 < length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂

length l₂ > 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
H: length l₂ > 0
length l₂ - 1 < length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂

length l₂ > 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
Hlen12: length [] ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m []
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ [] = length []

length [] > 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
d: M
l₂: list M
Hlen12: length (d :: l₂) ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m (d :: l₂)
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ (d :: l₂) = length (d :: l₂)
length (d :: l₂) > 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
Hlen12: length [] ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m []
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ [] = length []

length [] > 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
Hlen12: length [] ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: ( lst : M, last [] = Some lst ∧ lst ∈ eval ρ base) ∧ head [] = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip [] (tail []))
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ [] = length []

length [] > 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
Hlen12: length [] ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: ( lst : M, None = Some lst ∧ lst ∈ eval ρ base) ∧ None = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) []
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ [] = length []

length [] > 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
Hlen12: length [] ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Contra: None = Some m
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ [] = length []

length [] > 0
inversion Contra.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
d: M
l₂: list M
Hlen12: length (d :: l₂) ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m (d :: l₂)
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ (d :: l₂) = length (d :: l₂)

length (d :: l₂) > 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
d: M
l₂: list M
Hlen12: length (d :: l₂) ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m (d :: l₂)
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ (d :: l₂) = length (d :: l₂)

S (length l₂) > 0
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
H: length l₂ > 0

length l₂ - 1 < length l₂
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)

l₁ = l₂
(*assert (Hbasem': eval ρ base lst).*)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)

¬ length l₁ > length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
H: ¬ length l₁ > length l₂
l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)

¬ length l₁ > length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂

length l₂ - 1 < length l₁
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
Hlt: length l₂ - 1 < length l₁
False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂

length l₂ - 1 < length l₁
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
Hlt: length l₂ - 1 < length l₁

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
Hlt: length l₂ - 1 < length l₁
Hexm: x : M, l₁ !! (length l₂ - 1) = Some x

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
Hexm: x : M, l₁ !! (length l₂ - 1) = Some x

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
Hw₂': is_witnessing_sequence m l₂

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
Hw₂': ( lst : M, last l₂ = Some lst ∧ lst ∈ eval ρ base) ∧ head l₂ = Some m ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip l₂ (tail l₂))

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst1: last l₂ = Some lst
Hlst2: lst ∈ eval ρ base

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst

m' = lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst
Hlsteqm': m' = lst
False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst

m' = lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst

Some m' = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst
H: Some m' = Some lst
m' = lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst

Some m' = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst

l₁ !! (length l₂ - 1) = Some lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst

l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
apply Hlast12.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst
H: Some m' = Some lst

m' = lst
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst
H: Some m' = Some lst
H1: m' = lst

lst = lst
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
lst: M
Hlst2: lst ∈ eval ρ base
Hlst1: l₂ !! (length l₂ - 1) = Some lst
Hlsteqm': m' = lst

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: m' ∈ eval ρ base → is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
Hlst1: l₂ !! (length l₂ - 1) = Some m'
Hlst2: m' ∈ eval ρ base

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hm': l₁ !! (length l₂ - 1) = Some m'
Hwsm: is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
Hlst1: l₂ !! (length l₂ - 1) = Some m'
Hlst2: m' ∈ eval ρ base

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Hwsm: is_witnessing_sequence m' (drop (length l₂ - 1) l₁)
Hlst2: m' ∈ eval ρ base

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Heq: drop (length l₂ - 1) l₁ = []
Hwsm: is_witnessing_sequence m' []
Hlst2: m' ∈ eval ρ base

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: l
Hwsm: is_witnessing_sequence m' (d :: l)
Hlst2: m' ∈ eval ρ base
False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Heq: drop (length l₂ - 1) l₁ = []
Hwsm: is_witnessing_sequence m' []
Hlst2: m' ∈ eval ρ base

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m': M
Heq: drop (length l₂ - 1) l₁ = []
Contra: head [] = Some m'
Hlst2: m' ∈ eval ρ base

False
inversion Contra.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: l
Hwsm: is_witnessing_sequence m' (d :: l)
Hlst2: m' ∈ eval ρ base

False
(* if `l` is empty, then length l₁ = length l₂ -> Contradiction *)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base

length (drop (length l₂ - 1) l₁) = 1
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base
Hlendrop: length (drop (length l₂ - 1) l₁) = 1
False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base

length (drop (length l₂ - 1) l₁) = 1
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base

length [d] = 1
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base
Hlendrop: length (drop (length l₂ - 1) l₁) = 1

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base
Hlendrop: length l₁ - (length l₂ - 1) = 1

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base
Hlendrop: length l₁ - (length l₂ - 1) = 1

length l₂ ≠ 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base
Hlendrop: length l₁ - (length l₂ - 1) = 1
H: length l₂ ≠ 0
False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base
Hlendrop: length l₁ - (length l₂ - 1) = 1

length l₂ ≠ 0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base
Hlendrop: length l₁ - (length l₂ - 1) = 1
Hcontra': length l₂ = 0

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base
Hlendrop: length l₁ - (length l₂ - 1) = 1
Hcontra': l₂ = []

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
Hlen12: length [] ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m []
Hmwit: m ∈ witnessed_elements
Hcontra: length l₁ > length []
Hlast12: l₁ !! (length [] - 1) = [] !! (length [] - 1)
Hlcom: common_length l₁ [] = length []
m', d: M
Heq: drop (length [] - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base
Hlendrop: length l₁ - (length [] - 1) = 1

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁: list M
Hlen12: length [] ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
HContra'': head [] = Some m
Hmwit: m ∈ witnessed_elements
Hcontra: length l₁ > length []
Hlast12: l₁ !! (length [] - 1) = [] !! (length [] - 1)
Hlcom: common_length l₁ [] = length []
m', d: M
Heq: drop (length [] - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base
Hlendrop: length l₁ - (length [] - 1) = 1

False
inversion HContra''.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d: M
Heq: drop (length l₂ - 1) l₁ = [d]
Hwsm: is_witnessing_sequence m' [d]
Hlst2: m' ∈ eval ρ base
Hlendrop: length l₁ - (length l₂ - 1) = 1
H: length l₂ ≠ 0

False
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base

False
(* `d0` is a member of `witnessed_elements` *)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: head (tail (d :: d0 :: l)) = Some ?m' → is_witnessing_sequence ?m' (tail (d :: d0 :: l))

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: Some d0 = Some ?m' → is_witnessing_sequence ?m' (d0 :: l)

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: Some d0 = Some ?m' → is_witnessing_sequence ?m' (d0 :: l)

Some d0 = Some d0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: Some d0 = Some ?m' → is_witnessing_sequence ?m' (d0 :: l)
Htmp: Some d0 = Some d0
False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: Some d0 = Some ?m' → is_witnessing_sequence ?m' (d0 :: l)

Some d0 = Some d0
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: Some d0 = Some ?m' → is_witnessing_sequence ?m' (d0 :: l)
Htmp: Some d0 = Some d0

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Htmp: Some d0 = Some d0

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)

d0 ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)

d0 ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)

is_witnessing_sequence d0 (d0 :: l)
apply Hwd0.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
Heqm'd: m' = d
False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: ( lst : M, last (d :: d0 :: l) = Some lst ∧ lst ∈ eval ρ base) ∧ head (d :: d0 :: l) = Some m' ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: d0 :: l) (tail (d :: d0 :: l)))
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
H: head (d :: d0 :: l) = Some m'
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
H: Some d = Some m'
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

m' = d
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
H: Some d = Some m'
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H1: d = m'

m' = m'
reflexivity.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
m', d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hwsm: is_witnessing_sequence m' (d :: d0 :: l)
Hlst2: m' ∈ eval ρ base
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
Heqm'd: m' = d

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

False
(* `m'=d` matches `app_ext (eval ρ step) d0` *)
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

d ∈ app_ext (eval ρ step) {[d0]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}
False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

d ∈ app_ext (eval ρ step) {[d0]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: ( lst : M, last (d :: d0 :: l) = Some lst ∧ lst ∈ eval ρ base) ∧ head (d :: d0 :: l) = Some d ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) (zip (d :: d0 :: l) (tail (d :: d0 :: l)))
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

d ∈ app_ext (eval ρ step) {[d0]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: ( lst : M, last (d0 :: l) = Some lst ∧ lst ∈ eval ρ base) ∧ Some d = Some d ∧ Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((d, d0) :: match l with | [] => [] | x2 :: l2 => (d0, x2) :: zip l l2 end)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

d ∈ app_ext (eval ρ step) {[d0]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((d, d0) :: match l with | [] => [] | x2 :: l2 => (d0, x2) :: zip l l2 end)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements

d ∈ app_ext (eval ρ step) {[d0]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((d, d0) :: match l with | [] => [] | x2 :: l2 => (d0, x2) :: zip l l2 end)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
x: (M * M)%type
l0: list (M * M)
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (d, d0)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d0, x2) :: zip l l2 end
H: x = (d, d0)
H0: l0 = match l with | [] => [] | x2 :: l2 => (d0, x2) :: zip l l2 end

d ∈ app_ext (eval ρ step) {[d0]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((d, d0) :: match l with | [] => [] | x2 :: l2 => (d0, x2) :: zip l l2 end)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H1: uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]}) (d, d0)
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d0, x2) :: zip l l2 end

d ∈ app_ext (eval ρ step) {[d0]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) ((d, d0) :: match l with | [] => [] | x2 :: l2 => (d0, x2) :: zip l l2 end)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H1: d ∈ app_ext (eval ρ step) {[d0]}
H2: Forall (uncurry (λ new old : M, new ∈ app_ext (eval ρ step) {[old]})) match l with | [] => [] | x2 :: l2 => (d0, x2) :: zip l l2 end

d ∈ app_ext (eval ρ step) {[d0]}
apply H1.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}
H1: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}
H1: x : M, x ∈ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements → x ∈ ∅

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}
H1: d ∈ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements → d ∈ ∅

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}
H1: False

False
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}
H1: d ∈ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements → d ∈ ∅
d ∈ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}
H1: False

False
exact H1.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}
H1: d ∈ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements → d ∈ ∅

d ∈ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}

d ∈ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}

d ∈ eval ρ base
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}
d ∈ app_ext (eval ρ step) witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}

d ∈ eval ρ base
apply Hlst2.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}

d ∈ app_ext (eval ρ step) witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}

d ∈ app_ext (eval ρ step) witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
H: d ∈ app_ext (eval ρ step) {[d0]}

d ∈ {[ e | le re : M, le ∈ eval ρ step ∧ re ∈ witnessed_elements ∧ e ∈ app_interp le re ]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'

d ∈ {[ e | le re : M, le ∈ eval ρ step ∧ re ∈ witnessed_elements ∧ e ∈ app_interp le re ]}
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'

re : M, le' ∈ eval ρ step ∧ re ∈ witnessed_elements ∧ d ∈ app_interp le' re
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'

le' ∈ eval ρ step ∧ d0 ∈ witnessed_elements ∧ d ∈ app_interp le' d0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'

le' ∈ eval ρ step
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'
d0 ∈ witnessed_elements ∧ d ∈ app_interp le' d0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'

le' ∈ eval ρ step
apply H1.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'

d0 ∈ witnessed_elements ∧ d ∈ app_interp le' d0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'

d0 ∈ witnessed_elements
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'
d ∈ app_interp le' d0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'

d0 ∈ witnessed_elements
apply Hd0we.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'

d ∈ app_interp le' d0
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d, d0: M
l: list M
Heq: drop (length l₂ - 1) l₁ = d :: d0 :: l
Hlst2: d ∈ eval ρ base
Hwsm: is_witnessing_sequence d (d :: d0 :: l)
Hwd0: is_witnessing_sequence d0 (d0 :: l)
Hd0we: d0 ∈ witnessed_elements
le', re': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[d0]}
H3: d ∈ app_interp le' re'
H: d0 = re'

d ∈ app_interp le' re'
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements ⊆ ∅ ⊆ eval ρ base ∩ app_ext (eval ρ step) witnessed_elements
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hcontra: length l₁ > length l₂
d: M
l: list M
re': M
Heq: drop (length l₂ - 1) l₁ = d :: re' :: l
Hlst2: d ∈ eval ρ base
Hd0we: re' ∈ witnessed_elements
Hwd0: is_witnessing_sequence re' (re' :: l)
Hwsm: is_witnessing_sequence d (d :: re' :: l)
le': M
H1: le' ∈ eval ρ step
H2: re' ∈ {[re']}
H3: d ∈ app_interp le' re'

d ∈ app_interp le' re'
apply H3.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
H: ¬ length l₁ > length l₂

l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
H: ¬ length l₁ > length l₂

length l₁ = length l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
H: ¬ length l₁ > length l₂
Hlength12: length l₁ = length l₂
l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
H: ¬ length l₁ > length l₂

length l₁ = length l₂
lia.
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hlen12: length l₂ ≤ length l₁
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
H: ¬ length l₁ > length l₂
Hlength12: length l₁ = length l₂

l₁ = l₂
Σ: Signature
base, step: Pattern
patt_ind_gen_body:= nest_mu base or nest_mu step $ BoundVarSugar.B0: Pattern
patt_ind_gen_simple_body:= base or step $ patt_free_svar (fresh_svar patt_ind_gen_body): Pattern
Hwfpbase: well_formed_positive base
Hwfpstep: well_formed_positive step
M: Model
ρ: Valuation
F:= let X := fresh_svar patt_ind_gen_body in Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Domain_eq_dec: EqDecision M
Hstep_total_function: is_total_function step witnessed_elements witnessed_elements ρ
Hstep_injective: total_function_is_injective step witnessed_elements ρ
Hbase_step_no_confusion: eval ρ base ∩ app_ext (eval ρ step) witnessed_elements = ∅
m: M
l₁, l₂: list M
Hw₁: is_witnessing_sequence m l₁
Hw₂: is_witnessing_sequence m l₂
Hmwit: m ∈ witnessed_elements
Hlcom: common_length l₁ l₂ = length l₂
Hlast12: l₁ !! (length l₂ - 1) = l₂ !! (length l₂ - 1)
Hlength12: length l₁ = length l₂

l₁ = l₂
apply (common_length_impl_eq _ _ Hlength12 Hlcom). Qed. End injective. End with_eval. End inductive_generation. End with_signature.